Python unittest(使用SQLAlchemy)不写入/更新数据库?

2 投票
1 回答
1674 浏览
提问于 2025-04-16 09:03

我很困惑,为什么我的Python单元测试运行得很好,却没有实际更新数据库。

我甚至可以看到SQLAlchemy生成的SQL语句,并且可以查看新创建的用户对象的邮箱 --

...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'test@example.com', ...}
> .../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'test@example.com'

但是与此同时,当我登录到测试数据库时,我却看不到新记录。这是Python、unittest、SQLAlchemy、Pyramid还是PostgreSQL的某个我完全不知道的功能吗?

谢谢。

杰瑞

1 个回答

7

虽然我对SQLAlchemy不太了解,但听起来这个测试是在一个事务中运行的,而这个事务从来没有被提交。要么是被明确地回滚了,要么是在连接关闭时自动回滚。

撰写回答