簡體   English   中英

Psycopg2 參數化執行查詢

[英]Psycopg2 parameterized execute query

嘗試使用 Psycopg2 在我的 Postgres 查詢中使用參數。 當我谷歌搜索時,我看到有人使用%s但我想給出更多描述性的名稱,就像你在下面看到的那樣,以便以后我可以在 WHERE 子句中添加更多的列,並且它更容易閱讀。 那可能嗎? 我究竟做錯了什么?

q = ""
q += "SELECT"
q += " id"
q += " FROM tbl_users "
q += " WHERE "
q += "("
q += " b_enabled = (%enabled)"
q += ")"
enabled = "True"
db_cursor.execute(q,enabled)

僅供參考:我意識到在這種情況下我可以在 execute 方法中將“True”作為第二個參數,但這是我的代碼的簡化版本,以關注該問題。 我想知道如何在執行中放置一個變量,而不是在那個位置硬編碼“True”。

錯誤信息:

psycopg2.errors.SyntaxError:“$”處或附近的語法錯誤第 1 行:...d_visit_last FROM tbl_users WHERE ( b_enabled = ($t_enabled...

您可能希望使用多行字符串來定義 SQL 查詢,以提供更有意義的名稱,您可以使用字典將值傳遞給 psycopg2.execute():

import psycopg2
conn = psycopg2.connect("dbname=mf port=5959 host=localhost user=mf_usr")
cur = conn.cursor()

sql = """
    SELECT
        id
    FROM tbl_users
    WHERE
        b_enabled = %(enabled)s
"""

print (cur.mogrify(sql, {'enabled': "True"}).decode('utf-8'))
# cur.execute(sql, {'enabled': "True"})

輸出:

SELECT
    id
FROM tbl_users
WHERE
    b_enabled = 'True'

請查看官方文檔以獲取更多信息。

暫無
暫無

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

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