2016-12-12 3 views
1

Я пытаюсь найти путь вокруг SQLAlchemy. И я пытаюсь выяснить, как я могу получить доступ к объектам Column через экземпляр таблицы.Объекты столбцов доступа SQLALchemy

я в настоящее время у меня приложение, написанное с Peewee, как ОРМ и там я могу сделать следующее:

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]: '' 

или через текущий экземпляр:

In [10]: a = Vehicle() 
In [11]: a._meta.fields["code"] 
Out[11]: <db.fields.RsCharField at 0x7f08ce49da90> 

Когда я сделать то же самое в 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, что я использую в своей таблице декларации)

ответ

1
Vehicle.__table__.c.code.type 

Вы можете прочитать об этом в SQLAlchemy Documentation: Accessing Tables and Columns

+0

Tnx , это действительно была точка доступа, которую я искал. – RvL

+0

Если ответ вам помог, [примите его] (http://stackoverflow.com/help/someone-answers). –

0

Добавляя к ответу Сергея , доступ к атрибутам отношений в классе таблицы возвращает InstrumentedAttribute.

Для доступа к столбцам дочерних таблиц из родительской таблицы.

, например,

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

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

Если вы хотите получить доступ к столбцам в таблице CodePolicy из Bbc таблицы с помощью отношения code_policy, то

Bbc.code_policy.property.table.c.policy_description

Смежные вопросы