2017-02-27 3 views
0

とテーブルに存在するので、私はフィンランド語とスウェーデン語の名前を持つ町のシンプルなテーブルを持っていることを確認してください。は、すべての値が1つのクエリ

cursor.execute(
    "SELECT EXISTS (SELECT 1 FROM town WHERE name_fi=%s OR name_sv=%s)", 
    (town, town) 
) 
result = cursor.fetchone() # True/False 

しかし、今、私は、複数の町は、彼らがすべてが存在することを確認するためにこれを実行する必要があります:それはかなり簡単です

for town in towns: 
    # Code for one town from above 
    if result is False: 
     return False 
return True 

を代わりに使用することの一つのクエリでこれを行う方法はありますPython forループ?

+0

'(...)でname_fiまたはname_sv(..)で' –

答えて

0

リストとして町を渡します

cities = ['Paris', 'London'] 
template = ','.join(['%s'] * len(cities)) 

が参加し、必要に応じて集計:

query = ''' 
    select bool_and(name_fi is not null or name_sv is not null) 
    from 
     town 
     right join 
     (values {}) s (name) on name in (name_fi, name_sv) 
'''.format(template) 

print (cursor.mogrify(query, [tuple((city,)) for city in cities]).decode('utf8')) 
cursor.execute(query, [tuple((city,)) for city in cities]) 

結果はTrueまたはFalse

print cursor.fetchone()[0] 

出力のいずれかでありますPythonの部分について

select bool_and(name_fi is not null or name_sv is not null) 
from 
    town 
    right join 
    (values ('Paris'),('London')) s (name) on name in (name_fi, name_sv) 

True 

check this answer

関連する問題