首页 > 解决方案 > 为什么 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)

我如何检查是什么原因造成的?开发服务器正在运行。

标签: pythonflask-sqlalchemy

解决方案


您没有在调用之前导入模型db.create_all()- SQLAlchemy 根本不知道您的模型 - 因此无法创建表。

先导入,然后调用db.create_all()and db.session.commit()


推荐阅读