[英]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.