Я присоединяюсь 3 таблицы в SQLAlchemy Ядра и выбрать все столбцы следующим образом:Выбор столбцов из Mulitple соединения таблиц в SQLAlchemy Сердечник
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.
альтернативы можно было бы использовать выберите инст Свинец из Join.select и сделать его неявным присоединиться где статьи:
joinConditions = (orders.c.colx == execs.colx) & (execs.c.coly == instruments.c.coly)
select(reqdCols).where(and_(whereClause, joinConditions)
Но я предпочел бы явно присоединиться к более неявным соображениям производительности. Есть ли способ выбрать подмножество столбцов, используя явные объединения?
вы пожалуйста, дайте полный отслеживающий? – Nilesh
Где инициализируется 'whereClause'? – Nilesh
Я упростил это. В фактическом коде whereClause на самом деле является кортежем предложений и вызывается как: select (и _ (* whereClauses)). Кроме того, stacktrace выполняется из python REPL без предложения where, поскольку я сначала пытаюсь его интерпретировать. – apoorvkul