Flask-Blogging:错误:表[...]不存在,(表格未创建)

时间:2017-06-13 20:53:44

标签: python flask flask-sqlalchemy

我正在尝试将Flask-Blogging添加到现有应用中,但它似乎不想与现有的Flask-SQLAlchemy MySQL数据库一起使用。然而,它使用自己的sqlite数据库工作正常。

在应用启动时,它会尝试创建表(每次),并且不会出错:

flask run
 * Serving Flask app "myapp"
 * Forcing debug mode on
2017-06-13 21:32:33,369:DEBUG:flask-blogging:Created table with table name post
2017-06-13 21:32:33,371:DEBUG:flask-blogging:Created table with table name tag
2017-06-13 21:32:33,373:DEBUG:flask-blogging:Created table with table name tag_posts
2017-06-13 21:32:33,375:DEBUG:flask-blogging:Created table with table name user_posts
2017-06-13 21:32:33,472:INFO:werkzeug: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

但是,访问博客路径会(正确地)抱怨该表不存在。查看数据库,他们不在那里。

以下是相关代码:

db = SQLAlchemy()

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    db.init_app(app)

    migrate = Migrate()
    migrate.init_app(app, db=db)

    # Required to prevent Flask-Blogging messing with existing tables
    from app.models import User, Product, Purchase

    # Flask-Blogging database config
    with app.app_context():
        storage = SQLAStorage(db=db)
        blog_engine = BloggingEngine()
        blog_engine.init_app(app, storage)

config是一个配置对象,包含相关的sql连接字符串(在SQLALCHEMY_DATABASE_URI中)以及其他所需的Flask配置变量,并且对于应用程序的其余部分工作正常。

2 个答案:

答案 0 :(得分:1)

Flask-Blogging使用db获取metadata。我们在这里可能会缺少一些互动。您可以尝试为数据库对象和博客存储明确设置metdata吗?

from sqlalchemy import MetaData

metadata = MetaData() #
db = SQLAlchemy(metadata=metadata)
...
db.init_app(app)
...
storage = SQLAStorage(db=db)
# or
#storage = SQLAStorage(engine=db.engine,  metadata=metadata)
...

答案 1 :(得分:0)

展示剪切和粘贴编程的危险(你实际上并不了解代码的作用),我很遗憾:

db.create_all()
羞耻SO不会让你删除令人尴尬的愚蠢问题。 : - )