【问题标题】:Cast some columns and select all columns without explicitly writing column names转换一些列并选择所有列而不显式写入列名
【发布时间】:2020-04-12 21:22:18
【问题描述】:

我想投射一些列,然后选择所有其他列

id, name, property, description = column("id"), column("name"), column("property"), column("description")

select([cast(id, String).label('id'), cast(property, String).label('property'), name, description]).select_from(events_table)

有什么方法可以转换一些列并选择所有而不提及所有列名

我试过了

select([cast(id, String).label('id'), cast(property, String).label('property')], '*').select_from(events_table)

py_.transform(return_obj, lambda acc, element: acc.append(dict(element)), [])

但是我得到了两个额外的列(总共 7 列),它们被强制转换,我无法将它们转换为引发键错误的字典。

我正在使用 FASTAPI、sqlalchemy 和数据库(异步)

谢谢

【问题讨论】:

    标签: python-3.x database sqlalchemy fastapi


    【解决方案1】:

    你肯定可以的

    select_columns = []
    for field in events_table.keys()
        select_columns.append(getattr(events_table.c, field))
    
    select(select_columns).select_from(events_table)
    

    从该表中选择所有字段。您还可以保留您想要实际选择的字段列表,而不是 events_table.keys(),例如

    select_these = ["id", "name", "property", "description"]
    select_columns = []
    for field in select_these
        select_columns.append(getattr(events_table.c, field))
    
    select(select_columns).select_from(events_table)
    

    【讨论】:

    • 谢谢,我有一个解决方法,events_table 是一个 sqlalchemy.Table 所以我必须做 events_table.columns.keys() column_names = py_.transform(list(events_table.columns.keys()), lambda acc, value: acc.append(column(value)) if value not in ['id', 'property'] else acc.append(cast(column(f'{value}'), String).label(f'{value}')), []) 然后运行查询 query = select(column_names).select_from(main.app.events_table)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    相关资源
    最近更新 更多