gpt4 book ai didi

python - db.create_all() 不创建在单独文件中定义的表

转载 作者:太空狗 更新时间:2023-10-30 00:35:22 26 4
gpt4 key购买 nike

我正在尝试为我的模型创建表,这些表是在我的应用程序的单独模块中定义的。我调用 db.create_all(),但没有创建任何表,也没有任何错误。我已经定义了模型和 imported them before calling create_all .为什么这行不通?

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://postgres:123@localhost/flask'
db = SQLAlchemy(app)

from models import User

db.create_all()
db.session.commit()

models.py:

from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
__tablename__ = 'users'
uid = db.Column(db.Integer, primary_key = True)

最佳答案

您创建了两个单独的数据库实例,一个与应用程序一起创建,一个与模型一起创建。每个实例都有自己的元数据,用于存储在其上定义的表。您用来发出 create table 语句的那个​​不是定义模型的那个。您应该只使用一个扩展实例,在需要时导入它。

myapp/__init__.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)

# import the models *after* the db object is defined
from myapp import models

myapp/models.py:

from myapp import db

class User(db.Model):
...

create_tables.py:

from myapp import app, db

with app.app_context():
db.create_all()

其他注意事项:

  • 您应该将您的应用构建为一个包,这样所有内容都可以在一个位置导入。
  • flask.ext 已弃用,直接从其包名导入扩展。
  • Flask-SQLAlchemy 会根据类名自动生成__tablename__,你不需要自己定义。
  • 您不必在 create_all 之后调用 commit

关于python - db.create_all() 不创建在单独文件中定义的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35065926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com