Python unittest (с использованием SQLAlchemy) не записывает / не обновляет базу данных?

Меня озадачивает, почему мой Python unittest отлично работает без фактического обновления базы данных.

Я даже могу видеть операторы SQL из SQLAlchemy и просматривать электронную почту только что созданного объекта пользователя -

...INFO sqlalchemy.engine.base.Engine.0x...954c INSERT INTO users (user_id, user_name, email, ...) VALUES (%(user_id)s, %(user_name)s, %(email)s, ...)
...INFO sqlalchemy.engine.base.Engine.0x...954c {'user_id': u'4cfdafe3f46544e1b4ad0c7fccdbe24a', 'email': u'[email protected]', ...}
> .../tests/unit_tests/test_signup.py(127)test_signup_success()
-> user = user_q.filter_by(user_name='test').first()
(Pdb) n
...INFO sqlalchemy.engine.base.Engine.0x...954c SELECT users.user_id AS users_user_id, ...
FROM users 
WHERE users.user_name = %(user_name_1)s 
 LIMIT 1 OFFSET 0
...INFO sqlalchemy.engine.base.Engine.0x...954c {'user_name_1': 'test'}
> .../tests/unit_tests/test_signup.py(128)test_signup_success()
-> self.assertTrue(isinstance(user, model.User))
(Pdb) user
<pweb.models.User object at 0x9c95b0c>
(Pdb) user.email
u'[email protected]'

Но в то же время в то же время, когда я вхожу в тестовую базу данных, я не вижу там новую запись. Это какая-то особенность Python / unittest / SQLAlchemy / Pyramid / PostgreSQL, о которой я совершенно не знаю?

Спасибо.

Джерри


person Jerry    schedule 26.12.2010    source источник


Ответы (1)


Не знаю SQLAlchemy, но похоже, что тест выполняется в транзакции, и эта транзакция никогда не фиксируется. Либо явный откат, либо автоматический откат при закрытии соединения.

person Magnus Hagander    schedule 26.12.2010
comment
Наверняка. @Jerry, попробуйте использовать явное Session.commit(). - person Daniel Kluev; 26.12.2010
comment
Большое спасибо, именно это и происходит - person Jerry; 27.12.2010