gpt4 book ai didi

python - Flask-Blogging 错误表已定义

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:14 27 4
gpt4 key购买 nike

我使用了一段时间的 flask 设置,现在尝试在其上安装 Flask-Blogging 模块。当前模块:- 带有 postgres 的 Flask-sqlalchemy- flask 登录- Flask-Blogging(新)

我的 application.py 看起来像这样:

from flask import Flask
from flask import session
from flask.ext.blogging import SQLAStorage, BloggingEngine
from flask.ext.login import LoginManager
from flask.ext.sqlalchemy import SQLAlchemy

'''
The main application setup. The order of things is important
in this file.
'''
app = Flask(__name__)
app.config.from_object('config.base')
app.config.from_envvar('APP_CONFIG_FILE')

'''
Initialize database
'''
db = SQLAlchemy(app)


'''
Initialize blogger
'''
storage = SQLAStorage(db=db)
blog_engine = BloggingEngine(app, storage)

最后两行是我添加的唯一新内容(导入除外)。现在我突然收到关于重复表名的错误:

sqlalchemy.exc.InvalidRequestError: Table 'customer' is already defined for this MetaData instance.  Specify 'extend_existing=True' to redefine options and columns on an existing Table object.

知道我做错了什么吗?除了以下内容,我找不到太多关于 Flask-Blogging 的文档: http://flask-blogging.readthedocs.org/en/latest/

最佳答案

你得到这个错误是因为在 SQLAStorage.__init__ 中有这一行:

self._metadata.reflect(bind=self._engine)

这将查看您的数据库并为当前数据库中的所有表创建 sqlalchemy 表。

因此,如果您的数据库包含一个名为“客户”的表,您的代码中的行:

storage = SQLAStorage(db=db)

将自动为您建模名为“customer”的 sqlalchemy 表。

现在...毫无疑问,您在某处有自己的数据库模型定义,可能在另一个 python 模块中,例如:

class Customer(db.Model):
id = db.Column(db.Integer, primary_key=True)
...

由于此类定义定义了一个名为“customer”的表,并且由于 SQLAStorage 已经定义了一个名为“customer”的表,因此您的类 Customer 会立即出现异常是进口的。

解决此问题的一些方法是:

在实例化 SQLAStorage 之前导入您的数据库定义模块

'''
Initialize database
'''
db = SQLAlchemy(app)
import ankit.db_models # import my db models here so SQLAStorage doesn't do it first

'''
Initialize blogger
'''
storage = SQLAStorage(db=db)
blog_engine = BloggingEngine(app, storage)

告诉SQLAStorage使用它自己的元数据

通过将 db 参数传递给 SQLAStorage.__init__,您告诉它使用您的元数据。您可以只传递 engine 参数,它将创建自己的元数据。

storage = SQLAStorage(engine=db.engine)

关于python - Flask-Blogging 错误表已定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33049065/

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