我收到了很多错误的信息:
"DatabaseError: current transaction is aborted, commands ignored until end of transaction block"
作为Django项目的数据库引擎,从python-psycopg改为python-psycopg2。
代码保持不变,只是不知道这些错误来自哪里。
我收到了很多错误的信息:
"DatabaseError: current transaction is aborted, commands ignored until end of transaction block"
作为Django项目的数据库引擎,从python-psycopg改为python-psycopg2。
代码保持不变,只是不知道这些错误来自哪里。
当前回答
这里也有类似的错误。我在这个链接https://www.postgresqltutorial.com/postgresql-python/transaction/中找到了答案
client = PsqlConnection(config)
connection = client.connection
cursor = client.cursor
try:
for query in list_of_querys:
#query format => "INSERT INTO <database.table> VALUES (<values>)"
cursor.execute(query)
connection.commit()
except BaseException as e:
connection.rollback()
这样,你发送给postgresql的以下查询将不会返回错误。
其他回答
在Flask中,你只需要写:
curs = conn.cursor()
curs.execute("ROLLBACK")
conn.commit()
附注:文档在这里https://www.postgresql.org/docs/9.4/static/sql-rollback.html
你只需要跑
rollback;
在PostgreSQL中,就是这样!
我也遇到了同样的问题。我在这里遇到的问题是我的数据库没有正确地同步。简单的问题似乎总是引起最大的焦虑。
要同步你的django db,在你的app目录中,在终端中,输入:
$ python manage.py syncdb
编辑:注意,如果你正在使用django-south,运行'$ python manage.py migrate'命令也可以解决这个问题。
编码快乐!
根据我的经验,这些错误是这样发生的:
try:
code_that_executes_bad_query()
# transaction on DB is now bad
except:
pass
# transaction on db is still bad
code_that_executes_working_query() # raises transaction error
第二个查询没有问题,但是由于捕获了真正的错误,第二个查询将引发(信息量少得多的)错误。
edit:这只发生在except子句捕捉到IntegrityError(或任何其他低级数据库异常)时,如果你捕捉到像DoesNotExist这样的错误,这个错误将不会出现,因为DoesNotExist不会破坏事务。
这里的教训是不要尝试/except/pass。
这是一个糟糕的sql执行问题,它不允许其他查询执行,直到前一个查询被挂起/回滚。
在PgAdmin4-4.24中有一个回滚选项,可以尝试一下。