2017-02-01 4 views
3

私はSQLを勉強していますが、これは繰り返しですが謝罪していますが、検索して答えが見つかりませんでした。 PostgreSQL DBを使ってPythonで書く。値のPostgreSQLのテーブルの列をチェックしてブール値を返します

"ポート"列に特定の場所が含まれているかどうかを確認するには、データベースのテーブルをチェックします。私は対話的にこれを行うことができますが、それは例えば、テーブルの結果を返します:

select exists(select 1 from ref_locations where "Port"='ORAN'); 

それが返されます。

exists 
------- 
t 
(1 row) 

...私はそれだけでブール値を返すようにしたい、と私はやってみたいですそれは私のpythonスクリプトです。私のPythonスクリプトでは、私は持っています:

exists = False 
cnx.execute("""select exists(select 1 from ref_locations where "Port"='BAKU');""") 
print "Exists: ",exists 

しかし、常に存在するFalse。どんな助けでも大歓迎です。

+0

'印刷 "が存在する:"、あなたは変数が結果によって変更されない存在exists'クエリ。クエリから結果を取得し、それを変数に割り当てる必要があります。 'exists = cnx.get_result();'のようにカーソルに関数があります。 – wildplasser

+0

ありがとう!素晴らしい答え。そして、少なくとも私がこの作業を進めている中で、私は自分の "Port"テーブルに多くの言葉をテストしているので、実際にはテーブルをハッシュまたはパンダテーブルに読み込むほうが速いことに気付きました。毎回データベースに照会してください。 – Callie

答えて

1

あなたのPostgreSQLの文は、問題ではありません。

select exists(select from ref_locations where Port='ORAN'); 

あなたが抱えている問題execute文の結果が何にも割り当てられていないということです。

(あなたが文を実行した後)の代わりにこれをしようと考えてみましょう:

exists = cnx.fetchone() 

か、単に

print cnx.fetchone() 
0

多くの亜種が存在しますが、最も単純です:あなたはそれをこれに少しを短縮するかもしれませんが

select count(*) > 0 from ref_locations where "Port"='ORAN' 
関連する問題