有没有办法让psycopg和postgres处理错误而不必像MySQLdb那样重新建立连接?下面的注释版本与MySQLdb一起使用,注释使其与Psycopg2一起使用:
results = {'felicitas': 3, 'volumes': 8, 'acillevs': 1, 'mosaics': 13, 'perat\xe9': 1, 'representative': 6....}
for item in sorted(results):
try:
cur.execute("""insert into resultstab values ('%s', %d)""" % (item, results[item]))
print item, results[item]
# conn.commit()
except:
# conn=psycopg2.connect(user='bvm', database='wdb', password='redacted')
# cur=conn.cursor()
print 'choked on', item
continue
这一定会减慢速度,有谁能给我们一个建议来传递格式错误吗?很明显,上面的内容被撇号阻塞了,但是有没有一种方法可以让它忽略掉,而不需要像下面这样的东西,或者提交,重新连接等等?:
agreement 19
agreements 1
agrees 1
agrippa 9
choked on agrippa's
choked on agrippina
最佳答案
首先,您应该让psycopg通过将参数传递给execute()方法而不是使用“%”来为您进行转义。即:
cur.execute("insert into resultstab values (%s, %s)", (item, results[item]))
请注意,我们如何使用“%s”作为标记,即使对于非字符串值也是如此,并避免在查询中使用引号。psycopg会为我们做所有的报价。
然后,如果要忽略某些错误,只需回滚并继续。
try:
cur.execute("SELECT this is an error")
except:
conn.rollback()
这就是全部。psycopg将回滚并在下一条语句上启动新事务。