Cop*_*cus 2 python flask flask-sqlalchemy
我正在使用Flask-SQLAlchemy构建一个Flask应用程序,并且试图编写一个无需运行主应用程序即可创建Sqlite3数据库的脚本。为了避免循环引用,我已经在单独的模块中初始化了Flask应用程序主对象和SQLAlchemy数据库对象。然后,在运行该应用程序时,我将其导入并合并到第三个文件中。当我运行应用程序时,这可以很好地工作,因为数据库已构建,并且在创建行和查询行时可以正常运行。但是,当我尝试将它们导入另一个模块时,出现以下错误:
RuntimeError: application not registered on db instance and no applicationbound to current context
Run Code Online (Sandbox Code Playgroud)
我的代码如下所示:
root / create_database.py
from application.database import db
from application.server import app
db.init_app(app)
db.create_all()
Run Code Online (Sandbox Code Playgroud)
根/run.sh
export FLASK_APP=application/server.py
flask run
Run Code Online (Sandbox Code Playgroud)
root /应用程序/ init .py
from database import db
from server import app
db.init_app(app)
from routes import apply_routes
apply_routes(app)
Run Code Online (Sandbox Code Playgroud)
根目录/应用程序/数据库.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
Run Code Online (Sandbox Code Playgroud)
根/应用程序/ server.py
from flask import Flask
import os
app = Flask(__name__)
path = os.path.dirname( os.path.realpath(__file__) )
database_path = os.path.join(path, '../mydb.sqlite')
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + database_path
Run Code Online (Sandbox Code Playgroud)
root /应用程序/模型/ init .py
from user import User
Run Code Online (Sandbox Code Playgroud)
根目录/应用程序/模型/user.py
from application.database import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
password = db.Column(db.String(120))
def __init__(self, username, password):
self.username = username
self.password = password
Run Code Online (Sandbox Code Playgroud)
在我的create_database.py脚本中,我试图确保db使用app对象的配置详细信息配置了SQLAlchemy 实例,但是由于某种原因,它似乎没有连接。我在这里错过了重要的事情吗?
您要么必须创建一个请求,要么必须直接使用sqlalchemy创建模型。我们在工作中做了类似的事情,并选择了前者。
Flask允许您创建测试请求以初始化应用程序。尝试类似
from application.database import db
from application.server import app
with app.test_request_context():
db.init_app(app)
db.create_all()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8836 次 |
| 最近记录: |