繁体   English   中英

flask db 迁移中的名称错误 - 未定义表

[英]Nameerror in flask db migrate - Table not defined

我已经运行 flask db upgrade 来创建 Todos 表。 现在我添加了一个新表并与现有表建立了关系,并在现有表中添加了一个新字段。

我希望 flask db migrate 记录差异(添加新表 Todoslist 并在 Todo 中添加新字段)但是它说名称错误 - 未定义表。

class TodoList(db.Model):
  __tablename__ = 'todolists'
  id = db.Column(db.Integer, primary_key=True)
  name = db.Column(db.String(), nullable=False)
  todos.db.relationship('Todo', backref='list', lazy = True)


class Todo(db.Model):
   __tablename__ = 'todos'
   id = db.Column(db.Integer, primary_key=True)
   description = db.Column(db.String(), nullable=False)
   completed = db.Column(db.Boolean, nullable=False, default=False)
   list_id = db.Column(db.Integer, db.ForeignKey(todolists.id), nullable=True)

- 错误详情:

File "C:\Users\rg\anaconda3\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\rg\class_demos\Todoapp\app.py", line 26, in <module>
    class Todo(db.Model):
  File "C:\Users\rg\class_demos\Todoapp\app.py", line 32, in Todo
    list_id = db.Column(db.Integer, db.ForeignKey(todolists.id), nullable=True)
NameError: name 'todolists' is not defined

尝试的解决方案

  1. Flask 应用程序设置为当前 python 模块
  2. 尝试交换创建表(一个在另一个之前)
  3. 广泛搜索,这个错误似乎很常见,但无法找到像上面提到的匹配案例。

任何帮助深表感谢。

该错误源于您如何在TodoTodoList模型之间创建关系。

list_id需要正确初始化为TodoList.id的外键,这意味着它引用了TodoList表中的id值。 您错误地使用了todolists.id ,这是一个不存在的表。 相反,您应该将list_id定义为:

list_id = db.Column(db.Integer, db.ForeignKey("todoList.id"))

要在TodoList表中创建关系,您需要使用db.relationship初始化字段todos 这不是一个实际的数据库字段,而是TodoListTodo之间关系的高级视图,因此它不在数据库图中。 因此,您可以将字段正确创建为:

todos = db.relationship('Todo', backref='list', lazy='True')

我的错。 错过了todolists.id的报价

list_id = db.Column(db.Integer, db.ForeignKey("todolists.id"), nullable=True)

这解决了问题:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM