Python Unittest (mit SQLalchemy) schreibt/aktualisiert keine Datenbank?
-
13-10-2019 - |
Frage
Ich bin verwirrt darüber, warum mein Python Unittest vollkommen in Ordnung ist, ohne die Datenbank tatsächlich zu aktualisieren.
Ich kann sogar die SQL -Anweisungen von SQLalchemy sehen und durch die E -Mail des neu erstellten Benutzerobjekts gehen -
...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'
Doch am gleiche Zeit Wenn ich mich bei der Testdatenbank anmelde, tue ich das nicht Sehen Sie dort den neuen Rekord. Ist es eine Funktion von Python/unittest/sqlalchemy/pyramid/postgresql, der ich mich völlig nicht bewusst bin?
Vielen Dank.
Jerry
Lösung
Sqlalchemy nicht zu kennen, aber das klingt so, als würde der Test in einer Transaktion durchgeführt und dass diese Transaktion niemals begangen wird. Entweder explizit zurückgerollt oder automatisch zurückgerollt, wenn die Verbindung schließt.