使用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,然后将行值作为元组放在一个元组中,循环将每个元组作为文字添加到列表中,然后在构建查询时最后插入。