首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原始SQL to sqlalchemy语法

原始SQL to sqlalchemy语法
EN

Stack Overflow用户
提问于 2016-12-06 01:52:54
回答 1查看 186关注 0票数 0

我正在使用sqlaclhemy在我的python项目中查询我的数据库,我是sqlalchemy的新手,但是像目前的概念一样,我正在做一些非常简单的事情,比如,

代码语言:javascript
复制
sel = select([staff.c.name]) \
    .select_from(staff) \
    .where(staff.c.workbase != "") \
    .where((staff.c.status != 'Left') & (staff.c.status != 'Name Changed'))

我的项目的一部分需要更复杂的sql查询,但我希望将其保留在sqlalchemy中,我的原始sql如下所示,

代码语言:javascript
复制
    SELECT A.a_allowance, B.b_allowance, C.c_allowance, A.name, A.leave_allowance
FROM
    (SELECT ROUND(leave_allowance * 0.32, 2) as a_allowance, name, leave_allowance FROM staff_list) A
    INNER JOIN
    (SELECT ROUND(leave_allowance * 0.40, 2) as b_allowance, name FROM staff_list) B
    ON A.name = B.name
    INNER JOIN
    (SELECT ROUND(leave_allowance * 0.28, 2) as c_allowance, name FROM staff_list) C
    ON A.name = C.name
    WHERE A.name = 'Jones Jones';

我不确定如何在sqlalchemy中执行嵌套的select等操作。

EN

回答 1

Stack Overflow用户

发布于 2016-12-06 06:04:46

您可以使用.join()生成连接

代码语言:javascript
复制
>>> print(foo.join(bar, foo.c.bar_id == bar.c.id))
foo JOIN bar ON foo.bar_id = bar.id

您可以用子查询替换表达式中的表名:

代码语言:javascript
复制
>>> left = select([foo.c.bar_id]).select_from(foo).where(foo.c.baz > 0).alias("left")
>>> print(left.join(bar, left.c.bar_id == bar.c.id))
(SELECT foo.bar_id AS bar_id 
FROM foo 
WHERE foo.baz > :baz_1) AS "left" JOIN bar ON "left".bar_id = bar.id

在大多数情况下,子查询的行为与表完全相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40980335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档