【问题标题】:Update not commited on mysql server flask-sqlalchemy未在 mysql 服务器 flask-sqlalchemy 上提交更新
【发布时间】:2017-08-01 19:56:00
【问题描述】:

我能够对我的 Mysql 数据库执行“选择”查询。 但是,“插入”不会更改数据库,只会更改 python 对象。所以当我重新启动烧瓶应用程序时,所有提交的(?)版本都消失了。

观看次数:

from flask import Flask, render_template, request, redirect, url_for, flash, Response
from sqlalchemy import exc
from models import *

app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'kjhS7usfHGJHDez78'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqldb://admin:admin@127.0.0.1:3306/grenier'
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)

db.create_all()

@app.route('/ajax/submit_edition', methods=['POST'])
def submit_edition():
    if request.method == 'POST':
        given_id=1
        show = Shows.query.filter_by(id=given_id).first()
        show.short_description = "Hello"
        try:
            db.session.commit()
            db.session.flush()
            return "ok"
        except exc.SQLAlchemyError:
            return "Error in commiting the edition"

没有发现特别的异常。路由总是返回“ok”。

型号:

from sqlalchemy import Column, ForeignKey
from sqlalchemy.dialects.mysql import LONGTEXT, YEAR
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()


class Shows(db.Model):
    __tablename__ = "shows"

    id = Column(db.Integer, ForeignKey("programmation.id"), primary_key=True)
    date = Column(db.DATETIME)
    title = Column(db.VARCHAR(50))
    short_description = Column(db.VARCHAR(200))
    type = Column(db.VARCHAR(20))
    background_image = Column(db.VARCHAR(150))
    content = Column(LONGTEXT)

    def serialize(self, whatTo):
        result = {}
        if 'id' in whatTo:
            result['id'] = self.id
        if 'date' in whatTo:
            result['date'] = str(self.date)
        if 'title' in whatTo:
            result['title'] = self.title
        if 'short_description' in whatTo:
            result['short_description'] = self.short_description
        if 'type' in whatTo:
            result['type'] = self.type
        if 'background_image' in whatTo:
            result['background_image'] = self.background_image
        if 'content' in whatTo:
            result['content'] = self.content
        return result


class Programmation(db.Model):
    __tablename__ = "programmation"

    id = Column(db.Integer, primary_key=True)
    semester = Column(db.Integer)
    year = Column(YEAR)

当我查看日志时,会为 select 创建 sql 请求。但是对于insert commit(),什么都没有。

谢谢!

【问题讨论】:

    标签: python mysql flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    问题是使用了两个不同的SQLAlchemy 实例。当您调用db.create_all() 方法时,它会创建从db.Model 继承的所有表,但在您看来,您没有任何从db = SQLAlchemy(app) 继承的模型。您的所有模型都继承自其他 SQLAlchemy 实例。要解决此问题,请将 db 对象从视图导入模型模块并将其用作父类进行继承:

    #models.py
    from views import db
    
    #db = SQLAlchemy() #remove this line
    class Show(db.Model):
        ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-09
      • 2021-12-26
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 2014-08-11
      • 2015-05-16
      • 2016-10-16
      相关资源
      最近更新 更多