我想在Flask框架中执行这样的测试并获取消息:
InvalidRequestError: Instance '<User at 0x7f65938a7510>' is not persisted
File "tests.py", line 31, in test_removeProfil
db.session.delete(user)
我的测试代码:
class TestCase(unittest.TestCase):
def test_removeProfil(self):
user = User(name="John", age=33, email="john@john.com")
db.session.delete(user)
db.session.commit()
self.assertNotEqual(user.name, "John")
self.assertNotEqual(user.age, 33)
self.assertNotEqual(user.email, "john@john.com")
答案 0 :(得分:4)
您正在尝试删除新实例,而不是从数据库中获取的实例。您打算使用db.session.add()
,或者打算使用user = User.query.filter_by(email='john@john.com').first()
(或类似的东西)并删除它。
您可能也无法访问已删除实例的属性(假设您已正确删除它)。提交会话时,该会话中的所有实例都已过期。尝试访问过期的属性会触发数据库查找,但不能查找此对象,因为它已被删除。
您可以关闭expire_on_commit
,但这不是正常行为,可能会导致其他问题。
您也可以尝试在其上调用make_transient
。
最终,您应该放弃已删除的实例。可能有更好的方法来做你想要完成的任何事情。
答案 1 :(得分:1)
致电时
| Student Name | Courses |
|:-------------|-----------:|
| John | C1, C2, C3 |
| Marc | CA, CB, CC |
您创建python对象,而不是db中的对象。因此,您需要先将其添加到db
user = User(name="John", age=33, email="john@john.com")
之后,您可以从数据库中删除它
db.session.add(user)
db.session.commit()
和您的db.session.delete(user)
db.session.commit()
没有任何意义。您应该测试删除前后数据库选择的结果是否不同