Самоанализ SQLAlchemy классов/объектов ORM

Я ищу способ анализировать классы/объекты SQLAlchemy ORM для определения типов и других ограничений (как максимальные длины) свойств объекта.

Например, если у меня есть декларативный класс:

class User(Base):
    __tablename__ = "USER_TABLE"

    id = sa.Column(sa.types.Integer, primary_key=True)
    fullname = sa.Column(sa.types.String(100))
    username = sa.Column(sa.types.String(20), nullable=False)
    password = sa.Column(sa.types.String(20), nullable=False)
    created_timestamp = sa.Column(sa.types.DateTime, nullable=False)

Я хотел бы смочь узнать что'fullname'поле должно быть Строкой с максимальной длиной 100 и nullable. И'created_timestamp'поле является DateTime и не nullable.

5
задан Adam Batkin 6 May 2010 в 22:36
поделиться

1 ответ

Что-то вроде:

table = User.__table__
field = table.c["fullname"]
print "Type", field.type
print "Length", field.type.length
print "Nullable", field.nullable

РЕДАКТИРОВАТЬ:

В грядущей версии 0.8 есть Новая система проверки классов :

Новая Система проверки классов

Статус: завершена, нужны документы

Многие пользователи SQLAlchemy пишут системы, требующие возможности проверять атрибуты сопоставленного класса, включая возможность получить в столбцах первичного ключа, отношениях объектов, простых атрибутах и т. д., как правило, для создания систем маршаллинга данных, таких как схемы преобразования JSON / XML и библиотеки форм курса в изобилии.

Первоначально модель «Таблица и столбец» была исходной контрольной точкой, имеющей хорошо документированную систему. Хотя модели SQLAlchemy ORM также являются полностью самоанализом, это никогда не было полностью стабильной и поддерживаемой функцией, и пользователи, как правило, не имели четкого представления, как получить эту информацию .

0.8 имеет план по созданию согласованного, стабильного и полностью документированного API для этой цели, который предоставит систему проверки, которая работает с классами, экземплярами и, возможно, с другими вещами. Хотя многие элементы этой системы уже доступны, план состоит в том, чтобы заблокировать API, включая различные средства доступа, доступные из таких объектов, как Mapper, InstanceState и MapperProperty:

(перейдите по ссылке для получения дополнительной информации)

11
ответ дан 13 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: