質問

私は、データベースの分離レベルがFlask-Sqlalchemyと協力する方法、特に本当にコミットの変更を変更したり、セッションを閉じる方法を理解しています。これが私の問題の文脈です:

MySQLデータベースを使用してフラスコプロジェクトにFlask-SqlalChemyを使用しています。 これが私のプロジェクト

が設定されている方法です
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://user:passwd@localhost/mydb'
SQLALCHEMY_MIGRATE_REPO = '/path/to/myapp/db_repository'

CSRF_ENABLED = True
SECRET_KEY = 'this is a secret'
.

My dbファイル内の__init__.pyオブジェクトの作成:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
import config

app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
.

Printer Oneのようなモデルを定義しています:

from myapp import db
...
class Printer(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120))

    def __init__(self, name):
        self.name = name
.

私はPython端末で遊ぼうとしました、そして私はSqlalchemyのRead committedの絶縁レベルについて読んでも、次の問題に直面しています。これが私のコンソールに持っているものです:

>>> from myapp import app
>>> from myapp.models import Printer
>>> import config
>>> from flask.ext.sqlalchemy import SQLAlchemy
>>> app.config.from_object('config')
>>> db = SQLAlchemy(app)
>>> for printer in Printer.query.all():
...     print printer.name
...
Circle
Mww
>>> p = Printer('dummy')
>>> db.session.add(p)
>>> db.session.commit()
>>> for printer in Printer.query.all():
...     print printer.name
...
Circle
Mww
>>> 
.

データベースを調べると、私の変更はコミットされました:

mysql> SELECT * FROM printer;
+----+--------+
| id | name   |
+----+--------+
|  1 | Circle |
|  2 | Mww    |
|  3 | dummy  |
+----+--------+
3 rows in set (0.00 sec)
.

Python端末を終了したら、もう一度開き、Printer.Query.All()で結果を読み込むだけで、私の変更は表示されます。

私はSqlalchemyがコミットされるべき変更を待ち受けやセッションを閉じることを待っていますが、db.session.commit()ステートメントの後に私の変更を読むことができない理由も、セッションの閉鎖方法(db.session.close()を試しました)その後データベースを読んでもっと良い結果は得られません)

あなたの助けをありがとう!

役に立ちましたか?

解決

Sqlalchemyバージョンのクエリを使用するとどうなりますか?

db.session.query(Printer).all() 
.

2つのセッションが起こっているのか疑問に思う:

  1. あなたのアプリはPrinter.query.all()
  2. と話しているのを設定します。
  3. そのdb = SQLAlchemy()呼び出しによって作成したそのスニペットで使用しているものは
  4. db.session.commit()Printer.query.all()が持つデータをフラッシュしていない理由を説明します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top