[英]Creating a database in flask sqlalchemy
我正在用Flask-SQLAlchemy構建一個Flask應用程序,並且試圖編寫一個無需運行主應用程序即可創建Sqlite3數據庫的腳本。 為了避免循環引用,我在單獨的模塊中初始化了Flask應用程序主對象和SQLAlchemy數據庫對象。 然后,在運行該應用程序時,我將其導入並合並到第三個文件中。 當我運行應用程序時,這可以很好地工作,因為數據庫已構建,並且在創建行和查詢行時可以正常運行。 但是,當我嘗試將它們導入另一個模塊時,出現以下錯誤:
RuntimeError: application not registered on db instance and no applicationbound to current context
我的代碼如下所示:
root / create_database.py
from application.database import db
from application.server import app
db.init_app(app)
db.create_all()
根/run.sh
export FLASK_APP=application/server.py
flask run
root /應用程序/ init .py
from database import db
from server import app
db.init_app(app)
from routes import apply_routes
apply_routes(app)
根目錄/應用程序/數據庫.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
根/應用程序/ 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
root /應用程序/模型/ init .py
from user import User
根目錄/應用程序/模型/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
在我的create_database.py腳本中,我試圖確保已使用來自app
對象的配置詳細信息配置了SQLAlchemy db
實例,但是由於某種原因,它似乎沒有連接。 我在這里錯過了重要的事情嗎?
您要么必須創建一個請求,要么必須直接使用sqlalchemy創建模型。 我們在工作中做了類似的事情,選擇了前者。
Flask允許您創建測試請求以初始化應用程序。 嘗試類似
from application.database import db
from application.server import app
with app.test_request_context():
db.init_app(app)
db.create_all()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.