Обновление объекта в цикле for с использованием SqlAlchemy, теоретически это должно работать? - PullRequest
1 голос
/ 03 августа 2010

Итак, сначала я выбираю строки:

q = session.query(products)

for p in q:
    p.someproperty = 23

    session.commit()

Должно ли вышесказанное работать в теории? Или это неправильный шаблон?

Я получаю сообщение о том, что не могу изменить свойство, что странно, поэтому я подумал, что я делал что-то в корне неправильно.

Ответы [ 2 ]

2 голосов
/ 03 августа 2010

2 вещи:

Номер один, вам не нужно вводить commit() после каждого изменения.Вы должны быть в состоянии:

for p in session.query (query):
    p.someproperty = somevalue
session.commit()

и номер два, смотрите эту ветку здесь: Эффективное обновление базы данных с использованием SQLAlchemy ORM .Это дает еще один пример синтаксиса, а также принятый ответ предлагает лучший, более эффективный способ выполнить это массовое обновление.

1 голос
/ 04 августа 2010

Вы должны явно извлекать объекты, чтобы иметь возможность их изменять;Вы должны перебрать session.query(query_string).all().И, конечно, один коммит после завершения цикла будет более эффективным.

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