Как сделать INSERT в пирамиде, используя khufu_sqlalchemy - PullRequest
0 голосов
/ 18 марта 2012

Я пытаюсь изучить Python, и я выбрал Pyramid Framework. Однако я не хотел использовать ORM, предоставляемый sqlalchemy, а писать чистый sql (хотя я все еще использую sqlalchemy). Я также использую khufu_sqlalchemy, чтобы настроить его.

Однако я не могу сделать вставки в базу данных. Транзакция начинается, но никогда не совершается.
Мой код:

    db = dbsession(request)
    db.execute('insert into users (email, password) values (:email, :password)' , {'email':email, 'password':password})

Есть ли способ автоматической фиксации? Документация действительно скудная ..

Ответы [ 2 ]

1 голос
/ 19 марта 2012

khufu следует практике пирамиды использования менеджера транзакций для обработки ваших соединений с базой данных.Это означает, что есть код (ZopeTransactionExtension в инициализации вашего создателя сеанса), который перехватывает сеанс базы данных и отслеживает изменения.При обнаружении изменений они будут автоматически зафиксированы в конце запроса, если ошибок не возникнет.Если вы пропускаете ORM и вызываете функцию execute самостоятельно, вы можете либо: 1) отключить диспетчер транзакций и самостоятельно совершить вызов, либо 2) пометить сеанс как грязный после выполнения execute, чтобы соединение могло думать, что все изменилось, и автоматически вызывать commit.для тебя.Второй способ предпочтительнее, потому что если вы вызываете коммит преждевременно самостоятельно, остальная часть кода может потерпеть неудачу, и все же данные все еще сохраняются в вашей базе данных.Чтобы сделать второй способ, используйте функцию mark_changed из расширения.

from zope.sqlalchemy import mark_changed
session = DBSession()
mark_changed(session)

В качестве примечания: если вы хотите принудительно зафиксировать транзакцию до конца запроса, вы можете сделатьчерез

import transaction
transaction.commit()

Но, опять же, это произойдет автоматически в конце запроса, если не возникнет ошибок.

0 голосов
/ 19 марта 2012

http://docs.sqlalchemy.org/en/latest/core/connections.html

db.commit()

это то, что вы ищете. Проверьте дальнейшую документацию для автоматической фиксации.

...