python - 如何在 SQLAlchemy 中动态选择要查询的列?

标签 python postgresql sqlalchemy

我想通过查看 SQLAlchemy session.py

中的代码,从表中选择特定值
def query(self, *entities, **kwargs):
    """Return a new ``Query`` object corresponding to this ``Session``."""

    return self._query_cls(entities, self, **kwargs)

它似乎确实作为一个函数参数,它接受一个元组。所以我所做的是:

query = ('order', 'location')
columnsStr = 'order, location'
table = 'locations'
sql = "SELECT {0} FROM {1}".format(columnsStr, table)
data = session.query(query).from_statement(sql).all()

它会产生此错误 - InvalidRequestError: SQL expression, column, or mapped entity expected - got '('order', 'location')'

为什么这不适用于元组?

附言

如果我改变这些值:

query = 'location'
columnsStr = 'location'

我确实得到了结果,但仅限于那一列。

最佳答案

尝试

data = session.query('order', 'location').from_statement(sql).all()

或者,如果你想保留你的元组结构,你可以这样做

data = session.query(*query).from_statement(sql).all()

原因是当你传入一个元组 python 然后将该元组放入一个元组中

>>> x = (1,2,3)
>>> def f(*x):
    print x
>>> f(x)
((1, 2, 3),)
>>> f("location", "order")
('location', 'order')
>>> 

关于python - 如何在 SQLAlchemy 中动态选择要查询的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15576674/

相关文章:

给定元音变音字符时,python os.popen 失败

sql - Postgresql:SERIAL 在约束 INSERT 失败时递增

java - 将 UUID 与 EclipseLink 和 PostgreSQL 一起使用

python - Flask、SQLAlchemy 和多线程 : MySQL too many connections

python - 将数据添加到 SQLAlchemy 中的继承类

python - 为什么 Visual Studio 2015 在从源代码构建 Python 模块时报告缺少 header ?

python - 如何在Shapely中获取LineString的端点

python - 创建 RSA SHA-256(DNSSEC 有效) key ?

python - 具有多个对象层次结构的 SQLalchemy

ruby-on-rails - rails : Change my development database from sqlite to postgresql