Python: использование pyodbc и замена значений поля строки

Я пытаюсь выяснить, можно ли заменить значения записей в базе данных Microsoft Access (.accdb или .mdb) с помощью pyodbc. Я изучил документацию и отметил, где говорится, что "значения строк могут быть заменены", но я не смог заставить его работать.

В частности, я пытаюсь заменить значение строки из переменной python. Я пробовал:

  • установка автофиксации соединения на "True"

  • убедился, что это не проблема типа данных

Вот фрагмент кода, в котором я выполняю SQL-запрос, используя fetchone() для захвата только одной записи (я знаю, что с этим скриптом запрос возвращает только одну запись), затем я получаю существующее значение для поля (целое число позиции поля хранится в переменной z), а затем я получаю новое значение, которое я хочу записать в поле, обращаясь к нему из существующего словаря Python, созданного в скрипте.

pSQL = "SELECT * FROM %s WHERE %s = '%s'" % (reviewTBL, newID, basinID)

cursor.execute(pSQL)
record = cursor.fetchone()
if record:
    oldVal = record[z]
    val = codeCrosswalk[oldVal]
    record[z] = val

Я перепробовал все, что мог, но не смог заставить его работать. Я просто неправильно понимаю справочную документацию?

Сценарий выполняется успешно, но новое присвоенное значение никогда не фиксируется. Я даже пытался поместить «print str(record[z])this после строки record[z] = val, чтобы увидеть, имеет ли поле в таблице новое значение, и новое значение будет напечатано так, как оно сработало… но тогда, если Я проверяю таблицу после завершения сценария, старые значения все еще находятся в поле таблицы.

Очень ценю любое понимание этого ... Я надеялся, что это будет работать так же, как с помощью VBA в базах данных MS Access вы можете использовать набор записей ADO для циклического просмотра записей в таблице и присвоения значений полю из переменной.

спасибо, Том


person turkishgold    schedule 11.07.2011    source источник


Ответы (1)


«Значения строк могут быть заменены» из документации pyodbc относится к тому факту, что вы можете изменить значения в возвращаемых объектах строк, например, чтобы выполнить некоторую очистку или преобразование, прежде чем вы начнете их использовать. Это не означает, что эти изменения будут автоматически сохраняться в базе данных. Для этого вам придется использовать операторы sql UPDATE.

person Steven    schedule 11.07.2011
comment
Это разочаровывает, но именно этого я и ожидал после проб и ошибок. Не уверен, что это действительно дает вам с точки зрения функциональности, которую иначе нельзя было бы выполнить, получив значение поля, а затем манипулируя тем, что вам нужно, я думаю, если только манипуляция не зависела от значения 2-го поля, которое вы все еще могли бы выполнить захватывая значения и манипулируя, как вы считаете нужным. - person turkishgold; 12.07.2011
comment
Это может быть полезно, если у вас есть другая функция, которая ожидает строку pyodbc, но вы хотите внести некоторые изменения перед ее передачей. API Python DB просто требует, чтобы это была последовательность, и кортеж был бы самым простым/наиболее очевидным выбором. Но если бы это был, например, кортеж, вам пришлось бы создать новый кортеж с измененными значениями. Обновление строки было бы удобнее. Другое дело, нужно ли это на самом деле часто, я согласен с этим. Но, строго говоря, документы правы, когда упоминают об этом как о дополнительной функции, выходящей за рамки требований API БД. - person Steven; 12.07.2011