SQLAlchemy: различия между версиями

Содержимое удалено Содержимое добавлено
викификация
Строка 88:
===== Декларативное создание таблицы, класса и отображения за один раз =====
Предыдущее приближение к конфигурированию, включающее таблицу ''Table'', пользовательский класс и вызов ''mapper()'' иллюстрируют классический пример использования SQLAlchemy, в которой очень ценится разделение задач. Большое число приложений, однако, не требуют такого разделения, и для них SQLAlchemy предоставляет альтернативный, более лаконичный стиль: декларативный.
<source lang=python>>>>
from sqlalchemy.ext.declarative import declarative_base
>>>Base = declarative_base()
>>>class User(Base):
... __tablename__ = 'users'
... id = Column(Integer, primary_key=True)
... name = Column(String)
... fullname = Column(String)
... password = Column(String)
... def __init__(self, name, fullname, password):
... self.name = name
... self.fullname = fullname
... self.password = password
... def __repr__(self):
... return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
</source>
 
Выше — функция ''declarative_base()'', что определяет новый класс, который мы назвали ''Base'', от которого будет унаследованы все наши ORM-классы. Обратите внимание: мы определили объекты Column безо всякой строки имени, так как она будет выведена из имени своего атрибута.
Низлежащий объект ''Table'', что создан нашей ''declarative_base()'' версией ''User'', доступен через атрибут ''__table__''
<source lang=python>>>> users_table = User.__table__</source>
Имющиеся метаданные MetaData также доступны:
<source lang=python>>>> metadata = Base.metadata</source>
Еще один «декларативный» метод для SQLAlchemy доступен в сторонней библиотеке ''Elixir''. Это полнофункциональный продукт, который включает много встроенных конфигураций высокоуровневого отображения. Как и деклaративы, как только классы и отображения определены, использование ORM будет таким же, как и в классическом SQLAlchemy.