[英]How to put parameterized sql query into variable and then execute in Python?
我知道在 Python 中格式化 sql 查詢的正確方法是這樣的:
cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3)
以防止sql注入。 我的問題是是否有辦法將查詢放入變量中然后執行它? 我已經嘗試了下面的例子,但收到一個錯誤。 是否有可能做到這一點?
sql="INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3
cursor.execute(sql)
這是cursor.execute的調用簽名:
Definition: cursor.execute(self, query, args=None)
query -- string, query to execute on server
args -- optional sequence or mapping, parameters to use with query.
因此,execute最多需要3個參數(args是可選的)。 如果給出了args,則預期它是一個序列。 所以
sql_and_params = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3
cursor.execute(*sql_and_params)
不會起作用,因為
cursor.execute(*sql_and_params)
將元組sql_and_params擴展為4個參數(同樣,執行只需要3個參數)。
如果你真的必須使用
sql_and_params = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3
那么當你把它送到cursor.execute
時你就必須把它分開:
cursor.execute(sql_and_params[0],sql_and_params[1:])
但我覺得使用兩個變量感覺更愉快:
sql = "INSERT INTO table VALUES (%s, %s, %s)"
args= var1, var2, var3
cursor.execute(sql, args)
你很親密。
sql_and_params = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3
cursor.execute(*sql_and_params)
星號表示該變量不被視為一個參數,而是被解壓縮為許多參數。
這對我有用。 使用 pyodbc 查詢 Microsoft SQL Server。
cusotmer_list = ['ABC', '123']
# parameterized query placeholders
placeholders = ",".join("?" * len(customer_list))
# query table
query =
"""
SELECT
[ID],
[Customer]
FROM xyz.dbo.abc
WHERE [Customer] IN (%s)
""" % placeholders
# read query results in pandas dataframe
df = pd.read_sql(sql=query, con=cnxn, params=customer_list)
在python中將參數傳遞給sql查詢的最佳方式是:“INSERT INTO table VALUES (:1, :2, :3)”, [val1, val2, val3]
或另一個例子:
"更新表 T SET T.column2 = :1 where T.column1= :2 ", [val1,val2]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.