我正在开发一个flask应用程序,试图隔离我的单元测试。我使用的是flask sqlalchemy,我试图在运行测试之后使用create_all
和{
但是,似乎我的create_all
和drop_all
方法实际上并没有像文档所述那样创建/删除表。在调用create_all
之前,我在应用程序中导入了我的模型,就像大多数其他答案所说的那样。在
以下代码是我遇到的错误:
psycopg2.ProgrammingError: relation "tasks" does not exist
这是我的相关代码
/app.py
/tests/test_router.py
from unittest import TestCase
from flask import Flask
from app import app, db
from src.models import Task
class TestRouter(TestCase):
def setUp(self):
db.create_all()
def tearDown(self):
db.drop_all()
def test_adds_task(self):
task = Task(task_id='task_1', name='my task')
db.session.add(task)
db.session.commit()
我想我很快就提出了这个问题,但我希望这可能会帮助其他人想出解决类似问题的其他想法。在
在我保存模型的
src/models.py
文件中,您必须确保您的模型定义正确。由于Flask SQLAlchemy是SQLAlchemy的包装器,因此必须使用db
对象下的数据类型。在基本上,我的模型是这样定义的:
如您所见,我继承的是}的返回值。我还需要在所有数据类型前面添加}。在
db.Model
,而不是{db.
,包括Column
,Integer
,String
,Float
,DateTime
,relationship
,和{因此,我可以通过将模型更改为以下内容来解决我的问题:
^{pr2}$参见:Documentation on declaring Flask-SQLAlchemy models
相关问题 更多 >
编程相关推荐