flask sqlalchemy 创建关联表不成功

问题描述

python flask 项目,借助 flask_script pycharm 启动项目时,无法创建模型多对多的关联表

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
manager.py :

from flask_script import Manager, Shell
from flask_migrate import Migrate, MigrateCommand
# 导入model,才能创建成功
from app.models import Student
from appcore import app
from app.models import db

migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)


# def make_shell_context():
#     return dict(app=current_app, db=db)
#
#
# manager.add_command("shell", Shell(make_context=make_shell_context))

@manager.command
def create_db():
    db.create_all()


if __name__ == '__main__':
    manager.run()

model Student 类代码:

registrations = db.Table('registrations',
    db.Column('student_id', db.Integer, db.ForeignKey('students.id')),
    db.Column('class_id', db.Integer, db.ForeignKey('classes.id'))
)
 
 
class Student(db.Model):
   id = db.Column(db.Integer, primary_key=True)
   name = db.Column(db.String)
   classes = db.relationship('Class',secondary=registrations,
                                    backref=db.backref('students', lazy='dynamic'),
                                    lazy='dynamic')

在 manager.py 中需导入对应模型才可以创建成功,但是其中关联表
registrations 如何导入呢,如何才能在启动时自动创建呢?希望大神解惑一下,谢谢

阅读 3.1k
1 个回答

此问题已经解决,在这里说下以方便遇到同样问题的伙伴解决。

其中管理表中需加入 metadata,不然会报错,如下:

registrations = db.Table('registrations',
    db.Model.metadata,
    db.Column('student_id', db.Integer, db.ForeignKey('students.id')),
    db.Column('class_id', db.Integer, db.ForeignKey('classes.id'))
)

其中 db.Model 对应模型的继承类,即 class Student(db.Model) ,如果封装了 base 类需注意。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题