猿问

如何创建单独的文件以生成不同的数据库 Flask-SqlAlchemy 表?

我使用 Flask-Restplus 和 SqlAlchemy 创建我的表和 Api。我面临的问题如下:


起初我有这个user.py里面有2张桌子:


用户名


class User(db.Model):

    __tablename__ = "users_info"


    id = db.Column(db.Integer, primary_key=True, autoincrement=True)

    name = db.Column(db.Integer, unique=True, nullable=True)

    device = db.relationship('Device', backref='user')

    # .. some other field here



class Device(db.Model):

    __tablename__ = "user_device"


    device_id = db.Column(db.Integer, primary_key=True, autoincrement=True)

    id = db.Column(db.Integer, db.ForeignKey(User.id))

    # .. some other field here

此时,我使用下面的这 2 个命令manage.py来创建数据库,并且没有问题。


python manage.py db migrate


python manage.py db upgrade

管理文件


import os

import unittest


from flask_migrate import Migrate, MigrateCommand

from flask_script import Manager

from app import blueprint


from app.main import create_app, db


app = create_app(os.getenv('My_App') or 'dev')

app.register_blueprint(blueprint)


app.app_context().push()


manager = Manager(app)


migrate = Migrate(app, db)


manager.add_command('db', MigrateCommand)



@manager.command

def run():

    app.run()



if __name__ == '__main__':

    manager.run()

现在我想创建另一个名为 的文件product.py,它是同一个数据库的新表,如下所示:


产品.py


from .. import db

from .model.user import User



class Product(db.Model):

    __tablename__ = "product"


    product_id = db.Column(db.Integer, primary_key=True, autoincrement=True)

    product_name = db.Column(db.String)

    # plan here what you want in this table

    user_id = db.Column(db.Integer, db.ForeignKey(User.user_id))

如您所见,ProductclassUser与foreignKey.


结果:


但是我使用上面相同的命令再次迁移,结果如下所示:


INFO  [alembic.runtime.migration] Context impl SQLiteImpl.

INFO  [alembic.runtime.migration] Will assume non-transactional DDL.

INFO  [alembic.env] No changes in schema detected.

似乎没有从我的新文件中检测到新表。


我的问题:


如何创建单独的文件以生成不同的数据库表?


海绵宝宝撒
浏览 257回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答