【问题标题】:update joined table using sqlalchemy core使用 sqlalchemy 核心更新连接表
【发布时间】: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

Update a Joined Table with SQLAlchemy Core

【问题讨论】:

  • 在 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


【解决方案1】:
statement = sc2.update().where(and_(sc2.c._id == id, sc2.c._uuid == uuid, exists().where(and_(sc2.c._id == sc.c._id, sc.c._version == version))))

作品

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 2014-02-08
    • 2015-04-01
    • 2021-02-10
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多