gpt4 book ai didi

Python Psycopg 错误和连接处理 (v MySQLdb)

转载 作者:行者123 更新时间:2023-11-29 01:48:19 30 4
gpt4 key购买 nike

有没有办法让 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 将回滚并在您的下一条语句上开始新事务。

关于Python Psycopg 错误和连接处理 (v MySQLdb),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70681/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com