gpt4 book ai didi

python - SQLAlchemy + postgres : (InternalError) current transaction is aborted, 命令被忽略,直到事务 block 结束

转载 作者:行者123 更新时间:2023-11-29 13:36:09 24 4
gpt4 key购买 nike

我正在尝试保存父/子记录集,并且我想将插入内容包装在一个事务中。我在 postgresql 8.4 中使用 SQLAlchemy。

这是我的代码片段:

def insert_data(parent, child_rows):
# Start a transaction
conn = _get_connection()
tran = conn.begin()

try:
sql = get_sql_from_parent(parent)
res = conn.execute(sql) # <- Code barfs at this line
item = res.fetchone() if res else None
parent_id = item['id'] if ((item) and ('id' in item)) else -1

if parent_id == -1:
raise Exception('Parent could not be saved in database')

# Import children
for child in child_rows:
child_sql = get_child_sql(parent_id, child)
conn.execute(child_sql)

tran.commit()

except IntegrityError:
pass # rollback?

except Exception as e:
tran.rollback()
print "Exception in user code:"
print '-'*60
traceback.print_exc(file=sys.stdout)
print '-'*60

当我调用该函数时,我得到以下堆栈跟踪:

Traceback (most recent call last):
File "import_data.py", line 125, in <module>
res = conn.execute(sql)
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.7.4-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py", line 1405, in execute
params)
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.7.4-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py", line 1582, in _execute_text
statement, parameters
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.7.4-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py", line 1646, in _execute_context
context)
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.7.4-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py", line 1639, in _execute_context
context)
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.7.4-py2.6-linux-x86_64.egg/sqlalchemy/engine/default.py", line 330, in do_execute
cursor.execute(statement, parameters)
InternalError: (InternalError) current transaction is aborted, commands ignored until end of transaction block
...

有谁知道我为什么会收到这个神秘错误 - 我该如何解决?

最佳答案

你能在 postgresql 上激活日志查询吗? (在 postgresql.conf 中将 min_duration 设置为 0 然后重新启动)。

然后查看你的 postgresql 日志来调试它。

关于python - SQLAlchemy + postgres : (InternalError) current transaction is aborted, 命令被忽略,直到事务 block 结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10896173/

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