Как узнать, можно ли отключить изменения трека SQLALCHEMY?
каждый раз, когда я запускаю свое приложение, которое использует 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 (по умолчанию) колба-SQLAlchemy будет отслеживать изменения объектов и излучать сигналы. Это требует дополнительной памяти и может быть отключено, если нет необходимый.
как мне узнать, если мой проект требует SQLALCHEMY_TRACK_MODIFICATIONS = True
или если я могу спокойно отключить эту функцию и сохранить память на моем сервере?
3 ответа:
скорее всего, ваше приложение не использует систему событий 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
, тем самым отключив систему событий.насколько я понимаю, обоснование для изменения в три раза:
не многие люди используют систему событий Flask-SQLAlchemy, но большинство людей не понимают, что они могут сэкономить системные ресурсы, отключив его. Таким образом, более разумное значение по умолчанию-отключить его, и те, кто этого хочет, могут включить его.
система событий в Flask-SQLAlchemy был довольно глючным (см. проблемы, связанные с указанным ниже запросом pull), требующим дополнительного обслуживания для функции, которую мало кто использует.
в v0. 7, SQLAlchemy сам добавил мощная система событие включая возможность создания пользовательских событий. В идеале, система событий Flask-SQLAlchemy должна не делать ничего, кроме создания нескольких пользовательских крючков событий SQLAlchemy и прослушивателей, а затем позволить SQLAlchemy самому управлять триггер события.
вы можете увидеть больше в обсуждении вокруг запрос на вытягивание, который начал вызывать это предупреждение.
подробное объяснение Джеффа Уидмана просто идеально.
Так как у меня были некоторые copy'n'paste бои, прежде чем получить это право, я хотел бы сделать его легче для следующего, который будет на моем месте.
в коде, сразу после:
app = Flask(__name__)
Если вы хотите включить изменения трека просто добавить:
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
в противном случае, если вы не не используя эту функцию, вы можете изменить значение на False, чтобы не отходы системных ресурсов. Это все равно заставит замолчать предупреждение, так как вы в любом случае явно устанавливаете конфигурацию.
вот тот же фрагмент с ложным значением:
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
спасибо Джеффу Уидмана для этого добавил предложение и детали.
приведенные выше ответы выглядят хорошо. Однако я хотел указать эту строку в документации Flask-SQLAlchemy, потому что я все еще получал эти предупреждения после установки
SQLALCHEMY_TRACK_MODIFICATIONS = False
в моей конфигурации приложения.на этой странице: http://flask-sqlalchemy.pocoo.org/2.3/config/
для Flask-SQLAlchemy существуют следующие значения конфигурации. Flask-SQLAlchemy загружает эти значения из вашей основной конфигурации колбы, которая может быть заполнена в различных пути. Обратите внимание, что некоторые из них не могут быть изменены после создания движка, поэтому убедитесь, что настроить как можно раньше и не изменять их во время выполнения.
другими словами, убедитесь, что вы настроили
app.config
до создание базы данных Flask-SQLAlchemy.например, если вы настраиваете приложение для установки
SQLALCHEMY_TRACK_MODIFICATIONS = False
:from flask import Flask app = Flask(__name__) app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app)