문제

난 이해하는 데 문제가 어떻게 데이터베이스의 격리 수준을 일으로 플라스크-의 정밀한 웹 애플리케이션을 빨리 빌며,특히 방법 commit 변경 또는 세션이 있습니다.여기에는 컨텍스트 내 문제의:

내가 사용하여 플라스크-밀한 웹 애플리케이션을 빨리 빌드를 위해 플라스크를 가진 프로젝트 MySQL 데이터베이스입니다.여기에 어떻게 구성되어 내는 프로젝트

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'

의 창조 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 하나:

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

나의 주위에는 파이썬 터미널,그리고 비록에 대해 읽어 Read committed isolation 수준의 정밀한 웹 애플리케이션을 빨리 빌드,내 얼굴을 다음과 같은 문제입니다.여기에 무엇이 내가 내 console:

>>> 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)

면 나는 파이썬은 터미널,다시 열고 그 결과를 읽습니다.쿼리가 있습니다.모든(),나의 변경 내용이 나타납니다.

하지만 내가 이해 정밀한 웹 애플리케이션을 빨리 빌기 위해 변경 될 수선 그리고/또는 세션 종료하지 왜 내가 읽을 수 없는 나이 변경 후에 db.session.commit() 문 얼마나 세션을 마(나도 db.session.close(), 를 읽고,후 데이터베이스하지 않는 더 나은 결과를 제공)

당신의 도움을 주셔서 감사합니다!

도움이 되었습니까?

해결책

어떻게 사용하는 경우에는 정밀한 웹 애플리케이션을 빨리 빌 버전의 쿼리가?

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

는지 궁금하네요가 있는 경우 두 개의 세션을 진행:

  1. 하나 앱을 설정하는 Printer.query.all() 은 이야기
  2. 당신이 사용하는 코드 조각을 만들어 그 db = SQLAlchemy() 전화

그것은 이유를 설명 db.session.commit() 지 않을 내뿜는 데이터 Printer.query.all() 니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top