【问题标题】:Using the SQLAlchemy ORM, how can I get the nth column?使用 SQLAlchemy ORM,我怎样才能得到第 n 列?
【发布时间】:2014-04-26 15:36:12
【问题描述】:

假设我通过 SQLAlchemy 的声明系统创建了一个表。

class Recipe (Base):
    __tablename__ = 'recipe'

    id = Column(Integer, primary_key=True)
    title = Column(Text)
    instructions = Column(Text)

现在假设我执行了一个查询,该查询产生了Recipe 类的实例r。如何获得rnth 列值? (例如,将r.instructions 表达为r[2] 之类的东西——这是行不通的。)

【问题讨论】:

  • 什么决定了列的顺序?
  • 我以为我是按照我指定班级成员的顺序来做的。不是这样吗?
  • 问题的措辞方式,我们只能假设是这样。所以,既然这就是你要找的东西,请查看this question
  • 我希望我的例子能说明这一点,但我发现这绝不是明确的。无论如何,感谢您的链接;尽管指定的解决方法比我希望的要复杂一些。没有任何特定的 SQLAlchemy 可以用来简化它吗?

标签: python sqlalchemy


【解决方案1】:

发现了一些东西:

getattr(r, list(Recipe.__table__._columns)[n].name)

Recipe.__table__columns 返回看起来像一个列表但实际上是一个ImmutableColumnCollection。所以我们使用list 将它变成一个,并取该列表的nth 元素的名称——列名(所以对于n == 2,那就是instructions)。最后,我们从Recipe 对象rgetattr 该名称的属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多