作为练习的一部分,我必须每秒从 csv 中插入一行到我的 postgres 数据库中。只要我的行都不包含字符串,一切都可以正常工作。我想知道如何在将变量添加到我的 INSERT 语句时让我的字符串只有 ' '。
with open(file_path, newline='') as csvfile:
reader = csv.reader(csvfile)
next(csvfile)
for row in reader:
print(row)
cursor.execute("INSERT INTO %s (%s) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" % (tbl_name, cols, row[0], row[1], row[2], row[3], row[4],row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15]))
time.sleep(1)
提前致谢
您永远不应该构建包含作为完整字符串 (*) 的值的查询,而应使用参数化查询
cursor.execute("INSERT INTO %s (%s) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
% (tbl_name, cols), row[:15]))
但是有些引擎不喜欢?
,在这种情况下,您可以使用%s
:
cursor.execute("INSERT INTO %s (%s) VALUES (%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s)"
% (tbl_name, cols), row[:15]))
这种模式已被弃用多年,因为它是SQL 注入攻击的原因......
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句