簡體   English   中英

Psycopg2 - 從作為元組傳入的參數查詢

[英]Psycopg2 - Query from parameters passed in as tuples

如果我有一個基本查詢,例如:

con = psycopg2.connection(**db)
cursor = connection.cursor()
dummyData = (("cheese", "wine") , ("nougat", "oj"), ("sandwich", "juice"))
sql = """ select * from meals where (food, drink) in %s """
cursor.execute(sql, (dummyData,))

這將給我任何行,其中食物和飲料與虛擬數據中的一個元組完全匹配。

我需要能夠查詢食物與元組的第一部分匹配而飲料與第二部分不匹配的位置。 並且不訴諸循環即:

sql = """ select * from meals where food = %s and drink != %s
for d in dummyData:
    cursor.execute(sql, d)

匹配項只能在特定元組內。 有沒有辦法不用循環就可以做到這一點?

我會假設一個設置

where meals = ANY(%S) and drink != ANY(%S) 

不會工作,因為它基本上會檢查每個列表中的所有項目。

我認為您必須加入 VALUES 列表。 psycopg2.extras 提供了一個輔助方法來協助完成此操作。

sql = """ SELECT meals.* FROM meals JOIN (VALUES %s) f(a,b) ON food=a AND drink!=b"""
result = psycopg2.extras.execute_values(cursor, sql, dummyData, fetch=True)
print(result)

我為提供的值列分配了“a”和“b”的別名,然后通過 ON 中的這些別名引用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM