SQLAlchemy: различия между версиями
Содержимое удалено Содержимое добавлено
Vladis13 (обсуждение | вклад) →Декларативное создание таблицы, класса и отображения за один раз: без этого не будет работать |
Исправление грамматических ошибок. |
||
Строка 89:
</source>
Атрибут ''id'', который не определен в ''__init__'', все равно существует из-за того, что колонка ''id'' существует в объекте таблицы ''users_table''. Стандартно ''mapper()'' создает атрибуты класса для всех колонок, что есть в ''Table''. Эти атрибуты существуют как
Так как мы не сказали SQLAlchemy сохранить Василия в базу, его ''id'' выставлено на ''None''. Когда позже мы сохраним его, в этом атрибуте будет храниться некое автоматически сформированное значение.
Строка 156:
На самом деле сессия определила, что та запись из таблицы, что она вернула, та же самая, что и запись, что она уже представляла в своей внутренней хеш-таблице объектов. Так что мы просто получили точно тот же самый объект, который только что добавили.
Та концепция ORM, что работает здесь, известная как ''карта идентичности'', обеспечивает, что все операции над конкретной записью внутри сессии оперируют одним и тем же набором данных. Как только объект с неким первичным ключом появится в сессии, все SQL-запросы на этой сессии вернут
Мы можем добавить больше User-объектов, использовав ''add_all()''
Строка 170:
А теперь мы скажем нашей сессии, что мы хотим отправить все оставшиеся изменения в базу и применить все изменения, зафиксировав транзакцию, которая до того была в процессе. Это делается с помощью ''commit()'':
<source lang=python>session.commit()</source>
''commit()'' сбрасывает все оставшиеся
Если посмотреть
<source lang=python>
vasiaUser.id
Строка 211:
# kolia Cool Kolian[S.A.]
# zina Zina Korzina</source>
Запрос также поддерживает в качестве аргументов дескрипторы, созданные с помощью ORM. Каждый раз, когда запрашиваются разнообразные объекты классов или
<source lang=python>
for name, fullname in session.query(User.name, User.fullname):
Строка 236:
# <User('kolia','Cool Kolian[S.A.]', 'kolia$$$')> kolia
# <User('zina','Zina Korzina', 'zk18')> zina</source>
Базовые операции с запросами включают в себя ''LIMIT'' и ''OFFSET'', которые удобно использовать
<source lang=python>
for u in session.query(User).order_by(User.id)[1:2]:
|