[英]Dynamic SQL query Psycopg2 values problem
使用Python和psycopg2我試圖構建一個動態SQL查詢來將行插入表中。
變量包括:1。 表名 2. 列名的 變量列表 3. 變量值列表,理想情況下在一個語句中輸入多行
我遇到的問題是從Python到SQL和psycopg2處理字符串文字,試圖避免將代碼暴露給SQL注入攻擊。
使用psycopg2中的SQL模塊,我已經解決了動態添加表名和列列表的問題。 但是我真的在努力添加VALUES。 首先,將值作為%(val)s放入查詢中,並且似乎像這樣傳遞給數據庫,從而導致錯誤。
其次,我希望能夠一次添加多行。
代碼如下。 所有幫助非常感謝:)
import psycopg2 as pg2
from psycopg2 import sql
conn = pg2.connect(database='my_dbo',user='***',password='***')
cols = ['Col1','Col2','Col3']
vals = ['val1','val2','val3']
#Build query
q2 = sql.SQL("insert into my_table ({}) values ({})") \
.format(sql.SQL(',').join(map(sql.Identifier, cols)), \
sql.SQL(',').join(map(sql.Placeholder,vals)))
當我打印此字符串作為print(q2.as_string(conn))時,我得到:
插入my_table(“Col1”,“Col2”,“Col3”)值%(val1)s,%(val2)s,%(val3)s
然后當我嘗試執行這樣的字符串時,我得到以下錯誤:
ProgrammingError:語法錯誤處於或接近“%”LINE 1:...(“Col1”,“Col2”,“Col3”)值(%(val1)s ...
^
好的我解決了這個問題 首先使用Literal而不是Placeholder,然后將行值作為元組放在一個元組中,循環將每個元組作為文字添加到列表中,然后在構建查詢時最后插入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.