如何在SQLAlchemy中动态选择查询列?

1 投票
1 回答
3418 浏览
提问于 2025-04-17 20:00

我想从一个表中选择特定的值,查看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'

我确实得到了结果,但只针对那一列。

1 个回答

3

试试看

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')
>>> 

撰写回答