簡體   English   中英

在Flask SQLAlchemy中創建數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM