python - 使用 SQLAlchemy 使用 SQL 表本身的数据更新 SQL 表

标签 python sqlalchemy

我有一个简短的 SQL 脚本,它将 SQL 表中的选定列从一个 id (main_id=1)“复制”到另外两个 id (main_id=3 和同一个表的 4)。 还有一些其他 id,它们是表主键的一部分。

该脚本使用 PostgreSQL 数据库运行良好。 但是,我想使用 SQLAlchemy ORM 替换它,但我不知道如何执行此操作。

UPDATE "MyTable" AS T
SET "Varname_1" = Cell."Varname_1",
    "Varname_2" = Cell."Varname_2"
FROM "MyTable" AS Cell
WHERE T.id_A = Cell.id_A AND
      T.id_B = Cell.id_B AND
      Cell.main_id = 1 AND
      T.main_id IN (3, 4);

有人可以帮我“翻译”这个吗?

最佳答案

不确定您遇到了什么问题,因为我可以按照Multiple Table Updates中的示例来做到这一点和 Using Aliases and Subqueries本教程的部分内容:

import sqlalchemy
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:', echo=True)
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy import alias
metadata = MetaData()

my_table = Table('MyTable', metadata,
    Column('id_A', Integer),
    Column('id_B', Integer),
    Column('main_id', Integer),
    Column('varname_1', String),
    Column('varname_2', String),
)
cell = my_table.alias("cell")
stmt = my_table.update(). \
    where(my_table.c.id_A == cell.c.id_A). \
    where(my_table.c.id_B == cell.c.id_B). \
    where(cell.c.main_id == 1). \
    where(my_table.c.main_id.in_([3, 4])). \
    values(varname_1=cell.c.varname_1,
           varname_2=cell.c.varname_2)
print(str(stmt))
print(stmt.compile().params)

关于python - 使用 SQLAlchemy 使用 SQL 表本身的数据更新 SQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57476646/

相关文章:

python - 过滤标签与 taggit 中其他模型的关系

python - urllib2 在 https 网站上失败

python - Flask-SQLAlchemy 无法在线程中更新数据

python - pyodbc autocommit 似乎不适用于 sybase 和 sqlalchemy

python - "from sqlalchemy import event"不工作

python - 用于更新表的 SQLAlchemy 自定义约束

python - 如何在 bash 中添加到起始 Python 路径

python - "admin"子目录触发(无意中)Django 管理页面

python - Pyramid 中的身份验证问题(记住+authentiated_userid)

python - 在 PostgreSQL 上使用 SQLAlchemy 的当前查询中使用 COUNT(*) OVER()