New*_*Guy 9 python flask flask-migrate
我想使用Flask-Migrate并查看他们的示例:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
if __name__ == '__main__':
manager.run()
Run Code Online (Sandbox Code Playgroud)
这作为一个简单的播放示例很有用,但我有多个模型,我不想在这个脚本和定义我的应用程序代码的模型中定义模型.因此,我想将它们拉入我可以在两者之间共享的模型文件中.
我尝试通过将User类放入a models.py然后从那里导入User来尝试这样做.不幸的是,这会抛出一个NameError: name 'db' is not defined.
我的问题是:
db = SQLAlchemy(app)在my models.py中使用吗?如果是这样,我的迁移脚本和烧瓶应用程序本身都可以使用吗?models.py,我如何在不通过db所有文件的情况下在自己的文件中使用我的模型?Mig*_*uel 17
将这么小的应用程序分区到模块中是很棘手的,因为您发现很多情况下您创建的两个模块需要相互导入,从而创建循环依赖项.
我建议你看一下如何使用app工厂函数和所有扩展的延迟初始化来正确构建更大的应用程序.这样做的一个示例应用程序是我书中的Flasky应用程序.
总而言之,可以将应用程序分成两部分,您只需要小心放置import语句的位置即可.在下面的示例中,我决定将db实例和User模型的创建移动到models.py文件中.
这是主要应用程序的模块:
from flask import Flask
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
from models import db # <-- this needs to be placed after app is created
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
Run Code Online (Sandbox Code Playgroud)
这是models.py:
from __main__ import app
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
Run Code Online (Sandbox Code Playgroud)
这里主模块将创建app,然后才会导入models.py.当models.py尝试app从主模块导入时,它已经被创建.如果您from models import db使用其他导入移动到文件的顶部,则此代码会中断.
| 归档时间: |
|
| 查看次数: |
9551 次 |
| 最近记录: |