сколько ожидающих операций сбрасывается при следующем запросе в SqlAlchemy ORM? - PullRequest
0 голосов
/ 15 апреля 2019

Я изучаю SQLAlchemy ORM и думаю, что у меня есть знания по основам. Хотя мне интересно знать одну вещь: когда вносится изменение, подразумевающее запись в базу данных (например, session.add(my_object)), это изменение обрабатывается как в ожидании в сеансе и не записывается до тех пор, пока следующий запрос.

Что мне интересно, так это: все такие записи всегда записаны перед следующим запросом, или следующий запрос должен быть как-то связан с ожидающей записью? Например, если я введу команду session.add(my_object), а затем моя следующая команда будет session.query(ClassOfMyObject).filter(...some condition which would match my_object).all(), я знаю, что первая запись обязательно будет сброшена перед выполнением этого последнего запроса. Но что, если объекты совершенно не связаны, например, session.add(apple) и session.query(Orange).filter(...) где нет даже внешнего ключа между яблоками и апельсинами? Будет ли написано apple до того, как мы запросим Orange?

Кроме того, в чем причина такой задержки? Почему бы не всегда сразу все промыть?

1 Ответ

1 голос
/ 15 апреля 2019

Представьте себе базу данных из ваших худших кошмаров.Спагетти-код запускает влево и вправо, делая, кто что знает.Может существовать бизнес-правило, согласно которому за каждое яблоко платится налог в размере 2 апельсинов.И поэтому, чтобы поддерживать порядок в мире, SQLAlchemy должен сбрасывать все изменения перед каждым выполненным вами запросом, если только вы не скажете ему, что в этом нет необходимости.

Что касается отсрочки сброса, он можетПример пакетной записи нескольких записей в одну и ту же таблицу в один оператор INSERT с несколькими значениями, что означает меньшее количество обращений к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...