【问题标题】:Dynamically query a subset of columns in sqlalchemy在 sqlalchemy 中动态查询列的子集
【发布时间】:2014-02-01 20:31:49
【问题描述】:

假设表中只需要两列(名称和 ID)。我会编写如下代码:

session.query(User.id, User.name).all()

但如果列名是动态的,

def get_data(table, columns):
    return session.query(*(getattr(table, column) for column in columns)).all()

但是上面那个看起来很难看。有没有更好的推荐方式?

【问题讨论】:

    标签: python orm sqlalchemy


    【解决方案1】:

    你可以使用select():

    from sqlalchemy.sql import select
    
    columns = ['id', 'name']
    print(session.query(select(from_obj=User, columns=columns)).all())
    

    希望对您有所帮助。

    【讨论】:

    • 谢谢。有用。这相当于query(User.id, User.name) 还是有什么不同?
    • 添加from sqlalchemy.sql import select
    • 不知道为什么我会收到Textual column expression 'name' should be explicitly declared with text('name'), or use column('name') for more specificity"
    • 如果遇到 Textual column expression 错误,可以将 column() 映射到每个数组元素,如下所示: 1) 导入 sqlalchemy.sql.column from sqlalchemy.sql import column 2) 将 column() 映射到每个数组元素specific_cols = list( map(lambda x: column(x), columns) ) 现在应该可以正常工作了:session.query(select(from_obj=User, columns=specific_cols)).all()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2023-03-16
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多