python-3.x - 基本 Flask SQLAlchemy 上下文问题

标签 python-3.x flask-sqlalchemy

我已经阅读了许多其他关于将模型与主应用程序分开的帖子,但我无法让它与 app.py(我的实际应用程序)和 models.py(我的数据库模型)一起工作。

如果我执行以下操作,我会得到一个没有表的 app.db 文件:

from app import db
db.create_all() 

如果我执行以下操作,我会收到 RuntimeError:找不到应用程序。在 View 函数内部工作或推送应用程序上下文。:

from app import db
db.create_all() 

我也看过Introduction into Contexts页面,无法弄清楚我把 def create_app(): 放在哪里,在我的情况下似乎都不起作用。

这是我的 app.py:

from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from models import userTable

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

@app.route('/', methods=['GET', 'POST'])
def home():
    return "home"

if __name__ == '__main__':
    app.run(debug=True)

这是我的模型.py:

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

class userTable(db.Model):

    __tablename__ = "userTable"

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)

最佳答案

也许您可以尝试以下方法:

app.py

from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
import models
from models import initialize_db

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

initialize_db(app)

@app.route('/', methods=['GET', 'POST'])
def home():
    return "home"

if __name__ == '__main__':
    app.run(debug=True)

模型.py

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

def initialize_db(app):
  app.app_context().push()
  db.init_app(app)
  db.create_all()

class userTable(db.Model):

    __tablename__ = "userTable"

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)

关键是在 models.py 中创建一个数据库初始化函数,它将应用程序实例作为参数。此函数仅在拥有其应用程序实例后才创建数据库表。这将允许您最初在没有应用程序实例的情况下导入模型模块,并且仍然具有模块化设计。

关于python-3.x - 基本 Flask SQLAlchemy 上下文问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54448979/

相关文章:

python - 以关键字作为变量的 flask sqlalchemy查询

Python Flask 将表单数据保存到数据库

python - 有什么办法可以使这段代码更快?

Python通过串口向Vellemank8090写入数据

python - 如何在实例上调用变量,以便在也是实例的属性上调用变量

flask - 如何初始化不安作为 flask 蓝图

python - VS代码中的文件夹

python - Python 中随机的字典数据类型

python - SQLAlchemy 模型中的流程字段(使用 flask_sqlalchemy)

python - 将 func.now() 从 sqlalchemy 转换为字符串