2013-03-20 4 views
0

Я хочу перебирать кучу MySql строк в Python и, после того как я обрабатывать каждую строку, изменить его:Как изменить строку в результате запроса mySQL?

cursor.execute("SELECT someNonUniqueColumn,hasBeenProccessed 
       FROM myTable WHERE hasBeenProcessed = 0") 
for row in cursor: 
    # use someNonUniqueColumn for something... 
    ... 
    # set "hasBeenProccessed" to 1 

Я хотел бы избежать уродства: - того, чтобы выполнить другой SQL запрос каждый раз, когда я обрабатываю запись, или - заполнить массив с идентификаторами строк, как я обрабатываю их (оба из которых потребует добавить уникальный ключ к столу)

Итак, есть ли способ «проверяйте их, когда я иду»?

ответ

1

Нет, нет возможности изменить ряд в темпе. Для этого существует ряд причин: один из них - это то, что значения, возвращаемые запросом, могут не обновляться: считать подсчеты, суммы и другие совокупные функции.

Если вы выполняете только очень небольшое количество взаимодействия с базой данных, сбережения идентификаторов и выдача составного заявления update кажутся лучшими.

Если вы выдаете более 1-2 запросов в своей программе, сделайте себе одолжение и изучите SQLAlchemy или Django ORM. Также не является полностью прозрачным, но либо сэкономит вам огромное количество времени и отлаживает боль.

0

Почему бы не запустить запрос после выполнения изменения/обработки

UPDATE myTable SET hasBeenProcessed = 1 WHERE hasBeenProcessed = 0 

Если это возможно, конечно :)

+0

Но было бы печально, если бы какой-то другой код добавил дополнительные строки с 'hasBeenProcessed 'равно нулю, поскольку этот код сделал свой первоначальный запрос ... помните, что базы данных являются многопользовательскими. – holdenweb

Смежные вопросы