我有一个Docker安装程序,带有一个Flask应用程序和一个Postgresql后端。我希望能够根据Flask-SqlAlchemy中定义的模型在Postgres中创建我的所有表。目前,这不适用于我。
在我的应用程序__init__.py中,我使用配置文件创建了我的应用程序。
from flask import Flask
def create_app():
app = Flask(__name__)
app.config.from_pyfile("config.py")
app.config.from_pyfile("secrets.py")
return app
app = create_app()
from app import routes
在routes.py中,我从应用程序制作数据库,然后在第一个请求(导入了我的模型)之前进行设置:
from .models import User, Community, Post, Debate
...
db = SQLAlchemy(app)
@app.before_first_request
def setup():
db.init_app(app)
with app.app_context():
db.metadata.drop_all(bind=db.engine)
db.metadata.create_all(bind=db.engine)
db.session.commit()
我的模型继承自我从db.Model继承的BaseModel,其中db是我在route.py中定义的db的导入。
我在这里做错了什么?如何使flask-sqlalchemy自动为我创建表?我在吠错树吗?
答案 0 :(得分:0)
我建议在第一个请求之前不要进行数据库设置和拆除。它实际上会等待第一个请求,并在处理该请求之前,触发before_first_request处理程序。这将导致对您的服务的第一个请求挂起。
请改为考虑在create_app工厂中处理数据库设置。
from flask import Flask
from models import db # Or wherever you have it
def create_app():
app = Flask(__name__)
app.config.from_pyfile("config.py")
app.config.from_pyfile("secrets.py")
# Database setup
db.init_app(app)
db.drop_all() # This will delete everything
db.create_all() # This creates on the table schema
return app
app = create_app()
from app import routes