SQLALchemy访问列对象

2024-06-16 18:41:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在想办法绕过炼金术。我试图找出如何通过表实例访问Column对象。在

我目前用Peewee作为ORM编写了我的应用程序,在那里我可以执行以下操作:

In [15]:from db.models.vehicle import Vehicle
In [16]: Vehicle.code
Out[16]: <db.fields.RsCharField at 0x7fd93e53e780>
In [17]: Vehicle.code.default
Out[17]: ''

或者通过一个实际的例子:

^{pr2}$

当我在SQLAlchemy中执行同样的操作时,我得到一个:

In [11]: Vehicle.code
Out[11]: <sqlalchemy.orm.attributes.InstrumentedAttribute at 0x7fd9105f2938>

但我希望有实际的列类型,因为我扩展了列类型以拥有我想要访问的额外属性:

class RsColumn(Column):

    def __init__(self, *args, ui_group=None, ui_sequence=None, **kwargs):
        self.ui_group = ui_group
        self.ui_sequence = ui_sequence
        super().__init__(*args, **kwargs)

(因此,在本例中,我想访问在表声明中使用的RsColumn对象)


Tags: 对象inselfui类型dbinitgroup
2条回答
Vehicle.__table__.c.code.type

你可以在SQLAlchemy Documentation: Accessing Tables and Columns里读到

加上谢尔盖的回答, 访问表类中的关系属性将返回InstrumentedAttribute。在

用于从父表访问子表的列。在

例如

class Bbc(Base): name = Column(String) ... code_policy = relationship('CodePolicy') # related via foreign key

class CodePolicy(Base): policy_description = Column(String)

如果要通过code_-policy关系从Bbc表访问CodePolicy表中的列,则

Bbc.code_policy.property.table.c.policy_description

相关问题 更多 >