[英]SQLAlchemy (no ORM): update statement not committing
我的数据库模块中有此(匿名)功能:
def fix_publishing_dates(row_id, last_time=None, next_time=None,
next_index=1, user="python_script"):
sql = """
UPDATE
schema.table
SET
last_time = :last_time
, next_time = :next_time
, next_index = :next_index
, col4 = SYSDATE
, col5 = :user_id
, is_active = 1
WHERE
id = :row_id
"""
with closing(Session()) as s:
with s.begin_nested():
user_id = get_userid_by_name(user)
args = dict(
last_time=last_time,
next_time=next_time,
next_index=next_index,
row_id=row_id,
user_id=user_id,
)
s.execute(sql, args)
s.flush()
s.commit()
由于某种原因,这是行不通的。 我在上表中查询is_active = 1,得到零行。 我在这里做错什么吗?
我不想使用SQLAlchemy ORM为此添加很多样板表类*; 我就像将Session()与文本查询一起用于事务支持。
*:也不会因为自省而减慢我的启动时间; 到此数据库的网络管道很慢。
此代码(以不同的方式进行匿名化)也无法正常工作:
def fix_publishing_dates(**kwargs): sql = insert_query_here user_id = get_userid_by_name(user) args = dict(kwargs) print "*" * 50 print "* About to update database with values: {}".format(args) print "*" * 50 result = engine.execute(sql, args) print "Row count is:", result.rowcount #import ipdb;ipdb.set_trace() #s.commit()
我认为在不使用ORM对象的情况下,Sessions不会管理事务。 但是您可以直接在引擎上使用事务:
with engine.begin() as conn:
conn.execute(...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.