【发布时间】:2016-06-24 12:10:13
【问题描述】:
我想根据另一个表中的值更新一个表中的值。
我有 2 张桌子:
_LOCATIONR:_id、_status、_uuid
LOCATIONR:_id、_version 和一些用户数据
如果 _version=0, _uuid="42" 和 _id=1,_status 应设置为 1
我使用 python 和 sqlalchemy,数据库是 sqlite
sc#table LOCATIONR
sc2#table _LOCATIONR
version = 0
uuid = "42"
id = 1
statement = sc2.update().
where(and_(
sc2.c._id == id,
sc2.c._id == sc.c._id,
sc.c._version == version,
sc2.c._uuid == uuid))
r = statement.execute({"_status": 1, "_id": id, "_uuid": uuid})
日志:
2016-03-09 22:08:45,059 INFO sqlalchemy.engine.base.Engine UPDATE "_LOCATIONR" SET _uuid=?, _status=?, _id=? FROM "LOCATIONR" WHERE "_LOCATIONR"._id = ? AND "_LOCATIONR"._id = "LOCATIONR"._id AND "LOCATIONR"._version = ? AND "_LOCATIONR"._uuid = ?
2016-03-09 22:08:45,059 INFO sqlalchemy.engine.base.Engine ('42', 1, 1, 1, 0, '42')
2016-03-09 22:08:45,060 INFO sqlalchemy.engine.base.Engine ROLLBACK
每次我执行上述代码时,sqlalchemy 都会回滚。 仅当 where 子句引用 sc 时才会发生错误 但由于这些链接应该没问题 https://groups.google.com/forum/#!topic/sqlalchemy/HH7Rw65kypA
【问题讨论】:
-
在 sqlite 中,此 sql 语句有效: UPDATE _LOCATIONR SET _status=1 WHERE _uuid="42" AND _id=1 AND EXISTS (SELECT * FROM LOCATIONR WHERE _LOCATIONR._id=LOCATIONR._id AND LOCATIONR._version =0);提交;
标签: python sqlite join sqlalchemy sql-update