【问题标题】:How to dynamically select columns to query in SQLAlchemy?如何在 SQLAlchemy 中动态选择要查询的列?
【发布时间】:2013-03-23 01:49:03
【问题描述】:

我想通过查看 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'

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

【问题讨论】:

    标签: python postgresql sqlalchemy


    【解决方案1】:

    试试

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

    【讨论】:

    • 完全正确,谢谢!我终于发现您确实需要使用来自docs.python.org/2/tutorial/…*argumentsInTuple 语法解压缩您的参数元组,但非常感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    相关资源
    最近更新 更多