我有一个 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()
我的模型继承 self 创建的 BaseModel,它继承自 db.Model,其中 db 是我在 paths.py 中定义的数据库的导入。
我在这里做错了什么?如何让flask-sqlalchemy 自动为我创建表?我是不是找错树了?
最佳答案
我建议在第一个请求之前不要进行数据库设置和拆卸。它实际上会等待第一个请求,并在提供服务之前触发 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
关于python - 让flask-sqlalchemy使用db.create_all从模型创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52711665/