我有一个简短的 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/