python操作PG数据库出现current transaction is aborted,commands ignored until end of tranaact block
出现这个问题的原因是sql代码在执行时出现错误,由于PG事务自身的保护机制,所以PG本身会将为锁定,这个时候如果需要跳过当前的错误继续执行,则按PG的规则,需要处理掉当前的错误。可以选择在数据库中直接处理掉当前出现的问题,然后重新执行Python脚本,但是这样的做法不是很推荐,如果数据量少且数据质量好的话,这个方式也只能说是可行的,但是不是高效的。而且就目前而言,各平台的数据质量还是很差的,所以就需要新的方式解决,在数据库中有另外一个规则是“事务回滚”。如果报错了,又不想要让程序停下来,我们可以让程序先执行,然后把所有的错误都保存下来,这样我们就可以批量的去处理所有的问题了。解决方案如下:
try:
执行的代码
except Exception as e:
print(e)
可以with open将记录保存
conn.rollback()#让数据库中的事务进行回滚
这个解决方案适合对Python连接数据库较熟悉的人员,由于客观原因,代码不方便呈现,所以就希望看到的人能够读懂。其实只要知道我们就是在处理异常的时候将错误的sql语句进行了回滚并跳过即可