在SQLAlchemy Core中从多个表联接中选择列

OOO

我要在SQLAlchemy Core中加入3表,并选择所有列,如下所示:

rows = self.db.execute(self.execs.join(
                         self.orders.join(self.instruments)
                      ).select(whereClause)).reduce_columns())

它运作良好,但是如果我想选择列的子集:

reqdCols = [order.c.id, exec.c.last_modified, instruments.type]
rows = self.db.execute(self.execs.join(
                         self.orders.join(self.instruments)
                      ).select(reqdCols, whereClause)).reduce_columns())

它不起作用,并给出以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/apps/qtdist/pkgs/pub/cpython/python-2.7.6/lib/python2.7/site-packages/sqlalchemy/sql/selectable.py", line 807, in select
    return Select(collist, whereclause, from_obj=[self], **kwargs)
  File "/apps/qtdist/pkgs/pub/cpython/python-2.7.6/lib/python2.7/site-packages/sqlalchemy/sql/selectable.py", line 2219, in __init__
    whereclause).self_group(against=operators._asbool)
  File "/apps/qtdist/pkgs/pub/cpython/python-2.7.6/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 3438, in _literal_as_text
    "SQL expression object or string expected."
sqlalchemy.exc.ArgumentError: SQL expression object or string expected.

另一种选择是使用select而不是Join.select,并使用where子句使其隐式连接:

joinConditions = (orders.c.colx == execs.colx) & (execs.c.coly == instruments.c.coly)
select(reqdCols).where(and_(whereClause, joinConditions)

但是由于性能原因,我宁愿显式联接而不是隐式联接。有什么方法可以使用显式联接选择列子集?

OOO

可以按照以下步骤完成:

j = join(table1, table2)   #optional third argument is join on part like table1.c.c1 == table2.c.c1

r = db.execute(select([table1.c.x, table2.c.y]).select_from(j)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从SQLAlchemy中的表中选择特定列

来自分类Dev

在sqlalchemy中是否可以指示要选择的表而不从中选择任何列?

来自分类Dev

在sqlalchemy中是否可以指示要选择的表而不从中选择任何列?

来自分类Dev

在sqlAlchemy中选择*

来自分类Dev

使用Flask和SQLAlchemy从不同的联接表中选择属性

来自分类Dev

SQLAlchemy中的嵌套联接

来自分类Dev

SQLAlchemy中的嵌套联接

来自分类Dev

SQLAlchemy:通过联接多个表获取单个对象

来自分类Dev

如何在SQLAlchemy中删除多个表

来自分类Dev

SQLAlchemy强制左联接

来自分类Dev

SQLAlchemy强制左联接

来自分类Dev

在SQLAlchemy中使用联接

来自分类Dev

跨多个表的SQLAlchemy关系

来自分类Dev

从SQLAlchemy中的时间戳中选择日期

来自分类Dev

从SQLAlchemy中的时间戳中选择日期

来自分类Dev

SQLAlchemy关系与多个外键联接

来自分类Dev

从SQLAlchemy子查询中选择整个实体

来自分类常见问题

sqlalchemy不为空选择

来自分类Dev

在sqlalchemy表中标记列

来自分类Dev

SQLAlchemy中按OR的多个条件

来自分类Dev

Flask + SqlAlchemy ALTER表

来自分类Dev

在SQLAlchemy中获取表名

来自分类Dev

SQLAlchemy核心从(0..1)一对一关系中的联接表中进行选择会引发歧义名称InvalidRequestError

来自分类Dev

SQLAlchemy最大2列

来自分类Dev

如何扩展 sqlalchemy 列

来自分类Dev

SQLAlchemy中的删除约束

来自分类Dev

SQLAlchemy中的验证

来自分类Dev

SQLAlchemy中的VALUES子句

来自分类Dev

PostgreSQL在SQLAlchemy中的冲突