首页 > 解决方案 > 如何“重置”在使用来自 Flask 应用程序的数据库的 Python 脚本中运行的 db.session?

问题描述

我有以下代码:

from flask_migrate import upgrade

app = create_app()

with app.app_context():
    # Merge branch into master and then upgrade the database
    os.system("git pull origin BRANCH-B")
    
    # Upgrade the database (equivalent to flask db upgrade)
    # Assume here that a new column was added called: new_column
    upgrade()
    
    # Adding a row to the database using a Model object and complying with the
    # NEW database rows and format (after upgrade)
    model = Model(id=1, new_column = "test")
    
    # Above line gives an error

sqlalchemy.exc.OperationalError:(pymysql.err.OperationalError)(1054,“'字段列表'中的未知列'new_column'”)

这意味着 db.session 在执行升级操作后不会“刷新”数据库。知道怎么做吗?

谢谢,

问候。

标签: pythonflasksqlalchemyflask-sqlalchemy

解决方案


我最终使用 mysql 连接器(package mysql-connector-pythonin pip)连接到 mysql,然后连接到数据库并插入我想使用 mysqlINSERT语句手动插入的记录。

作为参考,这里是语法:

...
import mysql.connector

def insert_new_records():
    app = create_app()
    with app.app_context():
        cnx = mysql.connector.connect(
            user=app.config['SQL_USERNAME'], 
            password=app.config['SQL_PASSWORD'], 
            port=app.config['SQL_PORT'],
            database=app.config['DATABASE']
        )
        cursor = cnx.cursor()

        insert_stmt = (
          "INSERT INTO table (id, new_column) "
          "VALUES (%s, %s)"
        )

        # Insert new rows
        id = 1
        new_column = "test" # Could be any Python datatype
        data = (id, new_column)
        cursor.execute(insert_stmt, data)
        cnx.commit()

推荐阅读