programing

SQLALCHEMY_TRACK_MODIES를 사용하지 않도록 설정할 수 있는지 어떻게 알 수 있습니까?

linuxpc 2023. 6. 25. 18:31
반응형

SQLALCHEMY_TRACK_MODIES를 사용하지 않도록 설정할 수 있는지 어떻게 알 수 있습니까?

Flask-SQFlask-SQ를LA 저는 과 같은 .SQLALCHEMY_TRACK_MODIFICATIONS옵션이 비활성화됩니다.

/home/david/.virtualenvs/flask-sqlalchemy/lib/python3.5/site-packages/flask_sqlalchemy/__init__.py:800: UserWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True to suppress this warning.
  warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True to suppress this warning.')

이 옵션이 무엇을 하는지 알아보려 했지만 플라스크-SQ는이 추적을 사용하는 항목에 대한 자세한 내용은 LA 화학 문서에 나와 있지 않습니다.

SQLALCHEMY_TRACK_MODIFICATIONS

True(기본값)로 설정된 경우 Flask-SQLA 화학은 객체의 수정 사항을 추적하고 신호를 방출합니다.이 경우 추가 메모리가 필요하며 필요하지 않은 경우 비활성화할 수 있습니다.

에 프젝트필경어확인까니합게떻로우요한이 필요한지 어떻게 알 수 있습니까?SQLALCHEMY_TRACK_MODIFICATIONS = True또는 이 기능을 안전하게 비활성화하고 서버에 메모리를 저장할 수 있습니까?

대부분의 경우 애플리케이션에서 Flask-SQ를 사용하지 않습니다.La chemy 이벤트 시스템, 그래서 당신은 아마 꺼도 안전할 것입니다.확인하려면 코드를 감사해야 합니다. 또는 에 연결할 수 있는 모든 항목을 찾고 있습니다. Flask-SQ를 사용하는 경우LAlchemy 이벤트 시스템, 대신 SQLlchemy의 기본 제공 이벤트 시스템을 사용하도록 코드를 업데이트해야 합니다.

Flask-SQ lchemy 2.2.1입니다.None이 값은 잘못된 값이므로 이벤트 시스템이 비활성화됩니다.이전 버전에서는 기본값이 다음과 같습니다.True사용하지 않도록 명시적으로 설정해야 합니다.

그러나 두 경우 모두 경고가 다음과 같이 명시적으로 설정될 때까지 경고가 음소거되지 않습니다.False이를 위해 다음을 추가합니다.

SQLALCHEMY_TRACK_MODIFICATIONS = False

앱 구성으로 이동합니다.


배경--경고가 알려주는 내용은 다음과 같습니다.

Lchemy는 되는 자체 있습니다.LAlchemy에는 SQLlchemy 위에 계층화된 자체 이벤트 알림 시스템이 있습니다.이를 위해 SQL 화학 세션의 수정 사항을 추적합니다.이 작업에는 추가 리소스가 필요하므로 옵션을 사용됩니다.SQLALCHEMY_TRACK_MODIFICATIONS에서는 수정 추적 시스템을 비활성화할 수 있습니다.

변경의 근거는 세 가지입니다.

  1. 플라스크-SQ를 사용하는 사람은 많지 않습니다.LAlchemy의 이벤트 시스템이지만 대부분의 사람들은 비활성화함으로써 시스템 리소스를 절약할 수 있다는 것을 알지 못합니다.따라서 더 안전한 기본값은 이 기능을 사용하지 않도록 설정하는 것이며 원하는 사용자는 이 기능을 설정할 수 있습니다.

  2. 플라스크-SQ의 이벤트 시스템LA 화학은 다소 버그가 있어(아래에 언급된 꺼내기 요청에 연결된 문제 참조), 사용자가 거의 사용하지 않는 기능에 대한 추가 유지보수가 필요합니다.

  3. v0.7에서는 SQL 화학 자체가 사용자 지정 이벤트를 생성하는 기능을 포함한 강력한 이벤트 시스템을 추가했습니다.이상적으로는 플라스크-SQ가LAlchemy 이벤트 시스템은 몇 가지 사용자 지정 SQ만 생성하면 됩니다.LAChemy 이벤트 후크 및 수신기를 선택한 다음 SQLAlchemy 자체에서 이벤트 트리거를 관리하도록 합니다.

경고를 트리거하기 시작한 꺼내기 요청에 대한 자세한 내용은 이 항목에서 확인할 수 있습니다.

제프 위드먼의 자세한 설명은 그야말로 완벽합니다.

이 문제를 해결하기 전에 복사 붙여넣기 싸움이 있었기 때문에 제 입장이 될 다음 문제를 더 쉽게 해결하고 싶습니다.

코드에 다음 사이에 필요한 구성을 추가해야 합니다.

app = Flask(__name__)

그리고:

db = SQLAlchemy(app)

트랙 수정을 활성화하려면 다음을 추가합니다.

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

그렇지 않으면 이 기능을 사용하지 않는 경우 값을 False로 변경할 수 있습니다.

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

구성에서 매개 변수를 명시적으로 설정하고 있으므로 경고가 침묵합니다.

최종 결과는 이 예와 유사해야 합니다.

from flask import Flask

app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

사항
현재(2022년 7월) SQLALCHEMY_TRACK_MODIES는 기본값이 없음으로 설정되므로 구성하지 않을 경우 메모리 손실 위험이 없습니다.
어쨌든 경고를 표시하지 않으려면 구성에서 True와 False 중 하나를 선택해야 합니다.

추가된 제안과 세부사항에 대해 Jeff Widman에게 감사드립니다.

위의 답변은 좋아 보입니다.하지만 플라스크-SQ에서 이 선을 지적하고 싶었습니다.설정한 후에도 이러한 경고가 계속 발생했기 때문에 Lelchemy 설명서SQLALCHEMY_TRACK_MODIFICATIONS = False내 애플리케이션 구성에서.

다음 페이지: http://flask-sqlalchemy.pocoo.org/2.3/config/

Flask-SQ에는 다음과 같은 구성 값이 있습니다.라케미.플라스크-SQLAlchemy는 다양한 방법으로 채울 수 있는 기본 플라스크 구성에서 이러한 값을 로드합니다.엔진이 생성된 후에는 이러한 항목 중 일부를 수정할 수 없으므로 가능한 한 빨리 구성하고 런타임에 수정하지 마십시오.

다시 말해, 다음을 설정해야 합니다.app.config Flask-SQ를 생성하기 전에화학 데이터베이스입니다.

에는 ""라는 이름으로 설정합니다.SQLALCHEMY_TRACK_MODIFICATIONS = False:

from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

2020년부터 답변

이러한 질문이 있는 경우에는 이 기능이 필요하지 않습니다.

그나저나, 최고의 대답은 구식입니다.버전 2.1(2015년 10월 23일 출시)부터 이 구성SQLALCHEMY_TRACK_MODIFICATIONS기본값:None즉, 추적 동작이 기본적으로 비활성화되므로 메모리 손실에 대해 걱정할 필요가 없습니다.

단말기 경고가 문제가 되지 않는 한 경고를 다음과 같이 설정하여 억제할 수 있습니다.False:

from flask import Flask

app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

앱을 SqlAlchemy에 전달하기 전에 앱 구성 속성을 설정해야 합니다.다음은 sql 서버에 대한 연결을 설정하는 예입니다.

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

SECRET_KEY = os.urandom(32)
SERVER = 'MY_DB_SERVER'
DATABASE = 'MY_DB_NAME'
USERNAME = 'MY_DOMAIN\\MY_USERNAME'
PASSWORD = '$ecretsSecretsarenofun...' # the office ref iykyk
DRIVER = 'SQL SERVER'
DATABASE_CONNECTION = f'MSSQL://{USERNAME}:{PASSWORD}@{SERVER}/{DATABASE}?driver={DRIVER};trusted_connection=yes'

app = Flask(__name__)

# set your config properties BEFORE passing the app to SQLAlchemy
app.config['SECRET_KEY'] = SECRET_KEY
app.config['SQLALCHEMY_DATABASE_URI'] = DATABASE_CONNECTION
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

이 문제는 셸에 복사 붙여넣기를 통해 해결되었습니다.

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

언급URL : https://stackoverflow.com/questions/33738467/how-do-i-know-if-i-can-disable-sqlalchemy-track-modifications

반응형