Проблемы с scoped_session в sqlalchemy - как это работает?

Что касается Chrome/77.0.3865.75 версия 2019 не работы. toString сразу вызывает без открытия Инспектора.

const resultEl = document.getElementById('result')
const detector = function () {}

detector.toString = function () {
	resultEl.innerText = 'Triggered'
}

console.log('%c', detector)
<div id="result">Not detected</div>
6
задан Ben 15 June 2013 в 13:42
поделиться

2 ответа

Сеанс с заданной областью создает прокси-объект, который хранит реестр (по умолчанию) для каждого потока объектов сеанса, созданных по запросу из переданной фабрики сеанса. Когда вы обращаетесь к методу сеанса, например ScopedSession.add , он находит сеанс, соответствующий текущему потоку, и возвращает метод add , привязанный к этому сеансу. Активный сеанс можно удалить с помощью метода ScopedSession.remove () .

ScopedSession имеет несколько удобных методов, один из которых - query_property , который создает свойство, которое возвращает привязку объекта запроса к сеансу с заданной областью, в котором он был создан, и классу, к которому был осуществлен доступ. Другой - ScopedSession. mapper , который добавляет конструктор по умолчанию __ init __ (** kwargs) и по умолчанию добавляет созданные объекты в сеанс с заданной областью, из которого был создан преобразователь. Этим поведением можно управлять с помощью аргумента ключевого слова save_on_init преобразователя. ScopedSession.mapper устарел именно из-за проблемы, о которой идет речь. Это тот случай, когда действительно применима философия Python «явное лучше, чем неявное». К сожалению, Elixir по-прежнему по умолчанию использует ScopedSession.mapper .

Это тот случай, когда действительно применима философия Python «явное лучше, чем неявное». К сожалению, Elixir по-прежнему по умолчанию использует ScopedSession.mapper .

Это тот случай, когда действительно применима философия Python «явное лучше, чем неявное». К сожалению, Elixir по-прежнему по умолчанию использует ScopedSession.mapper .

7
ответ дан 10 December 2019 в 02:51
поделиться

Оказывается, elixir устанавливает save-on-init = True для созданных мапперов. Это можно отключить:

using_mapper_options(save_on_init=False)

Это решает проблему. Престижность stepz на #sqlalchemy за то, что сразу понял, что происходит. Хотя мне все еще любопытно, как на самом деле работает scoped_session, поэтому, если кто-то ответит на это, он получит признание за ответ на вопрос.

2
ответ дан 10 December 2019 в 02:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: