我正在尝试将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配置变量,并且对于应用程序的其余部分工作正常。
答案 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不会让你删除令人尴尬的愚蠢问题。 : - )