![](/img/trans.png)
[英]flask unable to run db migrate - NameError: name 'conn_uniques' is not defined
[英]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
尝试的解决方案
任何帮助深表感谢。
该错误源于您如何在Todo
和TodoList
模型之间创建关系。
list_id
需要正确初始化为TodoList.id
的外键,这意味着它引用了TodoList
表中的id
值。 您错误地使用了todolists.id
,这是一个不存在的表。 相反,您应该将list_id
定义为:
list_id = db.Column(db.Integer, db.ForeignKey("todoList.id"))
要在TodoList
表中创建关系,您需要使用db.relationship
初始化字段todos
。 这不是一个实际的数据库字段,而是TodoList
和Todo
之间关系的高级视图,因此它不在数据库图中。 因此,您可以将字段正确创建为:
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.