当前位置: 首页 > 面试题库 >

SQLAlchemy create_all()不创建表

黄德明
2023-03-14
问题内容

我正在尝试集成PostgreSQL和SQLAlchemy,但是SQLAlchemy.create_all()并未从我的模型中创建任何表。

我的代码:

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

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://login:pass@localhost/flask_app'
db = SQLAlchemy(app)
db.create_all()
db.session.commit()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username

admin = User('admin', 'admin@example.com')
guest = User('guest', 'guest@example.com')
db.session.add(admin)
db.session.add(guest)
db.session.commit()
users = User.query.all()
print users

但是我得到这个错误: sqlalchemy.exc.ProgrammingError: (ProgrammingError) relation "user" does not exist

我怎样才能解决这个问题?


问题答案:

您应该在create_all()调用之前放置模型类,如下所示:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://login:pass@localhost/flask_app'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username

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

admin = User('admin', 'admin@example.com')
guest = User('guest', 'guest@example.com')
db.session.add(admin)
db.session.add(guest)
db.session.commit()
users = User.query.all()
print users

如果您的模型是在单独的模块中声明的,请在调用之前将其导入create_all()

说,User模型在名为的文件中models.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://login:pass@localhost/flask_app'
db = SQLAlchemy(app)

# See important note below
from models import User

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

admin = User('admin', 'admin@example.com')
guest = User('guest', 'guest@example.com')
db.session.add(admin)
db.session.add(guest)
db.session.commit()
users = User.query.all()
print users

重要说明: 在初始化db对象之后导入模型很重要,因为在models.py_中,您还需要db从此模块导入对象。



 类似资料:
  • 问题内容: 我的档案中包含以下模型listpull/models.py: 我打电话./run.py init,然后./run.py migrate然后./run.py upgrade,我看到迁移文件生成,但其空: 运行 listpull / init.py 更新 如果我通过运行,然后执行和,那么将获得以下架构: 不幸的是,迁移仍然无法进行。 问题答案: 当你调用命令Flask-Migrate(或实

  • 我是Spring的开始者,请帮忙 实体 存储库: 控制器: 数据配置 : pom.xml文件 - 错误: 2016年8月29日下午3:33:04 org.apache.catalina.core。ApplicationContext日志

  • 问题内容: 我是新手,似乎无法工作 可以在等程序中实现。当我尝试在程序中运行此语句时,出现了。 我在文档页面中检查了Derby Db Create Statements ,但是找不到这样的选择。 问题答案: 创建表,捕获并检查SQL状态代码。 完整的错误代码列表可以在这里 找到, 但我找不到 ;大概是 。 您需要的代码是。 只需运行一次代码并打印错误代码。不要忘记添加测试以确保代码有效。这样,您可

  • 我有一个使用Spring Boot的中等规模项目,我正在尝试使用嵌入式H2创建我的第一个DataJpaTest,但我遇到了以下例外: 我已经尝试了这一点,并使用了一个模式。sql,还有这个和使用测试。测试/资源中的属性,以及其他答案。但什么都没用。我真的很困惑;这是我第一次在Spring Boot中遇到无法解决的问题。 我的实体类定义为: 关于如何强制Hibernate在H2中创建模式的任何建议?

  • 我刚接触hibernate并在Spring5中使用它,我有一个配置类创建sessionFactory bean,但它不工作(创建),当我运行我的项目时,我得到这个错误: 异常为org.springframework.beans.factory.beanCreationException:创建com.t4b.project.pricebuy.configuration.hibernateConfig

  • 这怎么了? 我有Windows10 Pro。所以,我有Docker Desktop并且我正在使用WSL2