python - 为什么 SQLAlchemy 不会提交更改?
问题描述
我之前成功地做了很多次,但突然之间我似乎无法让它工作。我正在使用 Flask SQLAlchemy 作为中间人在我的 MySQL 数据库中创建表。也使用pymysql
适配器。
你能检查我的“管道”是否正确吗?
我的初始化.py :
import werkzeug
werkzeug.cached_property = werkzeug.utils.cached_property
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from .config import DevConfig
db = SQLAlchemy()
bcrypt = Bcrypt()
def create_app(script_info=None):
app = Flask(__name__)
app.config.from_object(DevConfig)
bcrypt.init_app(app)
db.init_app(app)
from .flask_app import users_blueprint
app.register_blueprint(users_blueprint)
@app.shell_context_processor
def ctx():
return {'app': app, 'db': db}
return app
模型.py:
from project import db, bcrypt
class User(db.Model):
__tablename__ = 'users'
...
...
配置文件:
import os
class BaseConfig:
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://mark:supersecret@localhost/database1?charset=utf8mb4' # the "?charset" thingy is there to avoid encoding warnings from SQLAlchemy
SECRET_KEY = 'pythonrocks'
class DevConfig(BaseConfig):
DEBUG = True
class ProdConfig(BaseConfig):
DEBUG = False
口译员:
Instance: /home/mark/project/instance
In [1]: db
Out[1]: <SQLAlchemy engine=mysql+pymysql://mark:***@localhost/database1?charset=utf8mb4>
In [2]: db.create_all()
In [3]: db.session.commit()
我没有错误输出。这些表只是没有在提交时创建。
mysql> show tables;
Empty set (0.00 sec)
我如何检查是什么原因造成的?开发服务器正在运行。
解决方案
您没有在调用之前导入模型db.create_all()
- SQLAlchemy 根本不知道您的模型 - 因此无法创建表。
先导入,然后调用db.create_all()
and db.session.commit()
。
推荐阅读
- git - 处理未来更新中的合并冲突
- javascript - 在另一个函数中使用异步值 (JavaScript)
- shell - 在 Dockerfile 中使用 shell 脚本启动多个服务
- java - 如何在 Java 中使用 GUI 添加和删除文本
- python - 我正在制作一个烧瓶测验网页,我正在尝试将分数打印给用户
- flowtype - 两种函数类型的交集归结为什么?
- amazon-web-services - awscli s3 同步通配符
- python - 如何在字典的元组中获取值?
- javascript - 带有 uib-popover 的 ui-grid 作为 cellTemplate
- python - 如何将 SOM 与 K-Means 进行比较?