【发布时间】:2020-04-22 01:14:38
【问题描述】:
Postgresql 在每个表上隐式定义了几列,例如xmax 和ctid(参见docs)。
假设我的 SQLALchemy 表定义没有指定这些列,有没有办法使用核心 sql 功能(即不是 SA 的 ORM 部分)来选择它们?
由于xmax 未在表定义中明确定义,因此以下内容不起作用。
table = sa.Table(
"mytable",
metadata,
sa.Column("col_a", sa.BIGINT),
sa.Column("date", sa.DATE),
)
s = sa.select([table.c.xmax])
result = engine.execute(s)
具体来说,我的要求是在 upsert 的 returning 子句中引用 xmax。
insert(mytable).returning((mytable.c.xmax == 0).label("inserted"))
【问题讨论】:
-
我现在记得我可以提供文字 sql 作为字符串并回避问题,尽管我对任何其他方法感兴趣。
insert(mytable).returning(sa.text("xmax = 0 AS inserted"))
标签: sql postgresql sqlalchemy