在Flask会话

时间:2018-04-12 10:53:12

标签: python flask sqlalchemy commit

我试图在SQLAlchemy中更新记录(行)。我一直在关注这个问题中的解释:How to update SQLAlchemy row entry?这看起来非常简单,但是对我来说不合适。
关注这个问题:Update an object after session.commit() in SQLAlchemy,我也使用了expire_on_commit=False,但无济于事。

此问题解决了添加记录而不是修改记录的问题:A Flask-SQLAlchemy update is creating a new record in MySQL。此问题涉及将记录从一个表移动到另一个表:Replace existing records in SQLAlchemy Core。这两个问题都没有解决我的问题。

首先我从数据库中提取记录:

>>>first_record = db.session.query(LPRRank).get(1)

然后我在我的会话中检查它:

>>>first_record
M. Misty || None || 1 

一切看起来都不错,所以我输入了缺失字段的值:

>>>first_record.riding = 'South Riding'

再次检查记录:

>>>first_record
M. Misty || South Riding || 1 

我喜欢我看到的内容,因此我将其提交到数据库:

>>>db.session.commit()

显然,我错过了一些东西,因为现在我失去了骑行的价值:

>>>first_record
M. Misty || None || 1 

即使我做了另一个查询,我也输了我输入的值:

>>>first_record = db.session.query(LPRRank).get(1)
>>>first_record
M. Misty || None || 1 

即使我使用expire_on_commit=False

,仍然无法正常工作
>>>first_record = db.session.query(LPRRank).get(1)
>>>first_record
M. Misty || None || 1 
>>>first_record.riding = 'South Riding'
>>>first_record
M. Misty || South Riding || 1 
>>>expire_on_commit=False       <--------- right here
>>>db.session.commit()
>>>first_record = db.session.query(LPRRank).get(1)
>>>first_record
M. Misty || None || 1 

所以我的问题: 如何永久更改数据库需要做什么?

这是我正在使用的模型:

class LPRRank(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    candid = db.Column(db.String(40), index=True, unique=False)
    riding = db.Column(db.String(50), index=True, unique=False)
    rank = db.Column(db.Integer, index=True, unique=False)

def __repr__(self):
    return '{} || {} || {}'.format(self.candid, self.riding, self.rank) 

我如何从主模块构建会话:

from app import db
from app.models import LPRRank
def make_shell_context():
    return {'db': db, 'LPRRank': LPRRank}

和我的__init__.py文件:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
db = SQLAlchemy(app)
migrate = Migrate(app, db)

from app import routes, models

0 个答案:

没有答案