从 sqlAlchemy 表模型中获取表列

新手上路,请多包涵

我有一张表,我想在其中获取所有列名,但是在浏览了 interwebs 之后,我找不到可行的方法。这是我的桌子的样子:

 class myTable(Base):
    __tablename__ = 'myTable'

    col1 = Column(Integer, primary_key=True)
    col2 = Column(Unicode(10))
    col3 = Column(Integer)

    col4 = Column(Numeric(10, 6))
    col5 = Column(Numeric(6,3))
    col6 = Column(Numeric(6,3))

    child = relationship('tChild',
                          backref=backref('children'))

我希望能够从 for 循环中打印所有列名。前任:

 "col1", "col2", "col3".... etc

这对于常规 sql 来说非常容易,但我似乎无法弄清楚如何使用 sqlAlchemy 表模型来做到这一点

原文由 john 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 889
2 个回答

您从 __table__.columns 获得所有列:

 myTable.__table__.columns

或者

myTable.__table__.c

这些列的格式为 myTable.col1 (包括表名)。如果您只需要列名,请为每列获取 .key

 [column.key for column in myTable.__table__.columns]

原文由 alecxe 发布,翻译遵循 CC BY-SA 3.0 许可协议

下面是基于@ChaimG 答案的 sqlalchemy 表的通用 as_dict 实现。还有一个使用它实现的 __repr__ 的附加示例。

 from orm.base import Base

class MyTable(Base):
    __tablename__ = 'table_name'

    # Columns go here.....

    def as_dict(self):
        """
        Helper function that allows traversing the table's instance columns as key values

        :return: (key, value) iterator
        """
        for key in self.__table__.columns.keys():
            value = self.__getattribute__(key)
            yield key, value

    def __repr__(self):
        """
        General __repr__ implementation for an sqlalchemy table
        """
        values = []
        for key, value in self.as_dict():
            key_value_str = f"{key}={value}"
            values.append(key_value_str)

        values_str = ", ".join(values)
        cls_name = self.__class__.__name__
        return f"<{cls_name}({values_str})>"

原文由 Roei Bahumi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题