栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

有多个列的SQLAlchemy相关更新?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有多个列的SQLAlchemy相关更新?

根据您的头像和描述,我猜您正在使用Oracle。如果您的联接产生了一个关键的保留视图,则可以从此答案中使用以下SQLAlchemy混合:

stmt = select([foo.c.bar.label('foo_bar'),    foo.c.baz.label('foo_baz'),    foobar.c.bar.label('foobar_bar'),    foobar.c.baz.label('foobar_baz')]).    where(foo.c.id == foobar.c.id)update(stmt).values({stmt.c.foo_bar: stmt.c.foobar_bar,          stmt.c.foo_baz: stmt.c.foobar_baz})

产生以下SQL:

UPDATE (SELECT foo.bar AS foo_bar,    foo.baz AS foo_baz,    foobar.bar AS foobar_bar,    foobar.baz AS foobar_baz        FROM foo, foobar        WHERe foo.id = foobar.id)SET foo_bar=foobar_bar, foo_baz=foobar_baz

标签很重要,因为您的表共享列名。

您还可以生成原始目标SQL:

from sqlalchemy import tuple_, select, existsstmt = select([foobar.c.bar, foobar.c.baz]).where(foo.c.id == foobar.c.id)foo.update().    values({tuple_(foo.c.bar, foo.c.baz).self_group(): stmt}).    where(exists(stmt))

self_group()
调用很重要,因为在这种情况下,编译器似乎省略了元组周围的括号,从而产生了不正确的语法。我添加了WHERe子句,以避免更新没有匹配的
foob​​ar的 foo 行: __

UPDATE foo SET (bar, baz)=(SELECT foobar.bar, foobar.baz FROM foobar WHERe foo.id = foobar.id) WHERe EXISTS (SELECt foobar.bar, foobar.baz FROM foobar WHERe foo.id = foobar.id)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639682.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号