已经定义了FlaskBlogging错误表

2024-05-12 19:02:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我用了一段时间的烧瓶设置,现在尝试在上面安装烧瓶博客模块。当前模块: -烧瓶炼金术 -烧瓶登录 -烧瓶博客(新)

我的应用程序.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)

最后两行是我添加的唯一新内容(除了导入)。突然间,我得到一个关于重复表名的错误:

^{pr2}$

你知道我做错什么了吗?我找不到关于Flask Blog的文档,除了: http://flask-blogging.readthedocs.org/en/latest/


Tags: 模块thefromimportconfigappflaskdb
1条回答
网友
1楼 · 发布于 2024-05-12 19:02:08

出现此错误是因为在SQLAStorage.__init__中有一行:

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

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

因此,如果数据库包含名为“customer”的表,则代码中的行:

^{pr2}$

将为您自动为一个名为“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)

相关问题 更多 >