我希望仅当VALUE1
包含TABLE1
TABLE2
行添加到表VALUE2
我可以这样做:
session.query(TABLE2)
.filter(TABLE2.FIELD2 == VALUE2)
.update({TABLE2.FIELD2: VALUE2}) # without change. only for check
session.add(TABLE1(FIELD1=VALUE1))
session.commit()
但我认为我使用update
而没有任何更新是很奇怪的。
我想使用one
代替update
,但它不支持交易。
更新:这个解决方案错了......
这个简单的解决方案也是错误的:
my_flag = session.query(TABLE2).filter(TABLE2.FIELD2 == VALUE2).first()
# database can be updated here!
if my_flag:
session.add(TABLE1(FIELD1=VALUE1))
session.commit()
答案 0 :(得分:0)
如果您在TABLE1.VALUE1
上拥有唯一键,则可以先查询
TABLE2
并尝试插入TABLE1
。如果VALUE1
中已存在TABLE1
,则会抛出错误,您将能够回滚该事务。
from sqlalchemy.sql import exists
value_exists = session.query(exists().where(TABLE2.KEY2 == VALUE2)).scalar()
if not value_exists:
return
try:
dbsession.add(...)
dbsession.commit()
except IntegrityError as e:
dbsession.rollback()
raise e