【发布时间】:2011-09-05 09:04:42
【问题描述】:
我是 python 和 postgres 的新手。 我有一个从 csv 文件中读取数据并将数据插入到表中的代码。 该代码仅在文件中有无错误行时才有效。 但是,如果某些行中有任何错误,我希望 python 忽略这些行并将其余行插入表中。应将有错误的行写入单独的文件中。 代码如下:
import psycopg2
import csv
try:
conn = psycopg2.connect("dbname='postgres' user='postgres' host='localhost'
password='postgres'")
except:
print "I am unable to connect to the database"
cur = conn.cursor()
filehandle = open('abc.csv', 'r')
reader = csv.reader(filehandle, delimiter=',')
for row in reader:
statement = "INSERT INTO abc(col1,col2,col3) VALUES ('%s', '%s','%s')" % (tuple(row))
cur.execute(statement)
conn.commit()
【问题讨论】:
-
您是否真的建议您使用字符串操作将值替换为 SQL 查询? 忘掉它。如果该值包含
'(这可能很容易在某一天发生),您最终会得到无效查询,甚至查询会做一些完全不同的事情,因为这是可怕的 SQL 注入攻击。 -
事实上,使用参数甚至更容易。简单地说:
cur.execute("INSERT ... VALUES (?, ?, ?)", *tuple(row))应该可以。这将负责根据需要引用值。 -
抱歉,对于 PostgreSQL 的特殊情况,它不是
?,而是%s(参见initd.org/psycopg/docs/usage.html#query-parameters)。
标签: python