developer tip

SQLALCHEMY_TRACK_MODIFICATIONS를 비활성화 할 수 있는지 어떻게 알 수 있습니까?

optionbox 2020. 7. 25. 10:49
반응형

SQLALCHEMY_TRACK_MODIFICATIONS를 비활성화 할 수 있는지 어떻게 알 수 있습니까?


Flask-SQLAlchemy를 사용하는 앱을 실행할 때마다 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.')

이 옵션의 기능을 찾으려고했지만 Flask-SQLAlchemy 설명서에는이 추적이 무엇을 사용하는지 명확하지 않습니다.

SQLALCHEMY_TRACK_MODIFICATIONS

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

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


대부분의 응용 프로그램에서 Flask-SQLAlchemy 이벤트 시스템을 사용하지 않을 가능성이 있으므로 해제해도 안전합니다. 확인하려면 코드를 감사해야합니다 . models_committed또는에before_models_committed 연결되는 항목을 찾고 있습니다. Flask-SQLAlchemy 이벤트 시스템을 사용하고 있다면 SQLAlchemy의 내장 이벤트 시스템을 대신 사용하도록 코드를 업데이트해야합니다.

Flask-SQLAlchemy 이벤트 시스템을 끄고 경고를 비활성화하려면 다음을 추가하십시오.

SQLALCHEMY_TRACK_MODIFICATIONS = False

기본값이 변경 될 때까지 (Flask-SQLAlchemy v3에서) 앱 구성으로 변경하십시오.


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

Flask-SQLAlchemy에는 SQLAlchemy를 기반으로하는 자체 이벤트 알림 시스템이 있습니다. 이를 수행하기 위해 SQLAlchemy 세션의 수정 사항을 추적합니다. 추가 리소스가 필요하므로이 옵션 SQLALCHEMY_TRACK_MODIFICATIONS을 사용하면 수정 추적 시스템을 비활성화 할 수 있습니다. 현재이 옵션의 기본값은로 설정 True되어 있지만 나중에이 기본값은로 변경되어 False이벤트 시스템이 비활성화됩니다.

내가 이해하는 한, 변화에 대한 근거는 세 가지입니다.

  1. Flask-SQLAlchemy의 이벤트 시스템을 사용하는 사람은 많지 않지만 대부분 비활성화하여 시스템 리소스를 절약 할 수 있다는 것을 인식하지 못합니다. 따라서 기본 설정은 사용하지 않도록 설정하는 것이며 원하는 사람은 사용하도록 설정할 수 있습니다.

  2. Flask-SQLAlchemy의 이벤트 시스템은 다소 버그가 많았으며 (아래 언급 된 풀 요청에 링크 된 문제 참조) 소수의 사람들이 사용하는 기능을 추가로 유지 보수해야합니다.

  3. v0.7에서 SQLAlchemy 자체는 사용자 정의 이벤트 작성 기능을 포함한 강력한 이벤트 시스템추가했습니다 . 이상적으로 Flask-SQLAlchemy 이벤트 시스템은 몇 가지 사용자 정의 SQLAlchemy 이벤트 후크 및 리스너를 작성하고 SQLAlchemy 자체가 이벤트 트리거를 관리하도록하는 것 이상을 수행하지 않아야합니다.

이 경고를 트리거하기 시작한 풀 요청에 대한 자세한 내용을 볼 수 있습니다 .


Jeff Widman의 자세한 설명은 간단합니다.

이 권리를 얻기 전에 copy'n'paste 싸움을 했으므로 다음 신발을 더 쉽게 만들려고합니다.

코드에서 바로 다음 :

app = Flask(__name__)

트랙 수정을 사용하려면 다음을 추가하십시오.

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

그렇지 않으면 이 기능을 사용 하지 않는 경우 시스템 자원을 낭비하지 않기 위해 값을 False로 변경할 수 있습니다. 어쨌든 구성을 명시 적으로 설정하기 때문에 여전히 경고가 표시되지 않습니다.

False 값을 가진 동일한 스 니펫은 다음과 같습니다.

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

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


위의 답변이 좋아 보입니다. 그러나 SQLALCHEMY_TRACK_MODIFICATIONS = False응용 프로그램 구성에서 설정 한 후에도 여전히 경고가 표시되므로 Flask-SQLAlchemy 설명서 에서이 줄을 지적하고 싶었습니다 .

이 페이지에서 : http://flask-sqlalchemy.pocoo.org/2.3/config/

The following configuration values exist for Flask-SQLAlchemy. Flask-SQLAlchemy loads these values from your main Flask config which can be populated in various ways. Note that some of those cannot be modified after the engine was created so make sure to configure as early as possible and to not modify them at runtime.

In other words, make sure to set up your app.config before creating your Flask-SQLAlchemy database.

For example, if you are configuring your application to set SQLALCHEMY_TRACK_MODIFICATIONS = False:

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

db = SQLAlchemy(app)

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

반응형