【问题标题】:Select based on column name list in sqlalchemy根据 sqlalchemy 中的列名列表进行选择
【发布时间】:2021-12-14 10:58:58
【问题描述】:

给定一个列名列表,例如:

cols = ['a', 'b', 'c']

我想构建一个 sqlalchemy ORM 查询,相当于:

q = db.query(Foo.a, Foo.b, Foo.c)

当然我可以只使用查询:

q = db.query(Foo)

...,将每个结果行转换为字典,并使用上面的列名列表作为键从中提取值。我宁愿不这样做,因为我只需要一张大表中的几列,而且我想避免开销。

【问题讨论】:

  • q = db.query(*[getattr(Foo, attr) for attr in cols]) 怎么样?
  • 谢谢,这是我最终自己想出的更优雅的单行版本。

标签: python sqlalchemy


【解决方案1】:

总是相同的故事:绞尽脑汁数小时,放弃,提出问题,并在几分钟后找到解决方案:

colspec = [ Foo.__dict__[k] for k in cols ]
q = db.query(*colspec)

【讨论】:

    【解决方案2】:

    正如@Abdou 在评论中所说的那样

    q = db.query(*[getattr(Foo, attr) for attr in cols])
    

    为我工作

    【讨论】:

    • 谢谢。但是,在 Stack Exchange 上复制粘贴其他人的答案并不是一个好主意。由于 cmets 中提供了另一个答案(不是作为答案),我认为您可以在此处添加更多信息,说明为什么它最有效,提供一些文档链接和引用。你应该熟悉How do I write a good answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多