Заявление об обновлении по проблеме pyodbc

В настоящее время я разрабатываю программу на python, которая взаимодействует с несколькими базами данных. Я использую pyodbc для подключения и выполнения запросов. Одна из баз данных — это лазурная база данных. Я заметил, что иногда отправленные данные не обновляются в базе данных, хотя программа работает успешно и ошибок не возникает. Существуют ли какие-либо методы, которым я должен следовать, чтобы этого не произошло, или это связано с моим кодом или проблемой с подключением к базе данных? Я начинающий. Буду признателен за помощь всем спасибо!

Также следует ли запускать строку .commit() после каждого запуска sql?

Программа должна обновлять строку данных в базе данных на основе условия, этот конкретный запрос иногда не действует, но ошибки не возникает. После этого я также выполнил несколько запросов, для следующих запросов не было обнаружено проблем. Он успешно выполнен.

запрос представляет собой простой запрос, который

UPDATE DraftVReg SET VRStatus = 'Potential Duplicate Found' WHERE RowID = ?

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

BoarGules 09.01.2023 11:13

Проведите несколько тестов, используя pyodbc.connect(connection_string, autocommit=True). Если проблема исчезнет, ​​значит, в вашем коде где-то отсутствует вызов .commit().

Gord Thompson 09.01.2023 11:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попытался воспроизвести ваш сценарий со своей стороны и смог обновить строку SQL в базе данных SQL Azure с помощью модуля Pyodbc.

Да, очень нужно использовать

conn.commit 

для фиксации изменений в базе данных после выполнения таких операций, как обновление или вставка в базе данных SQL Azure программным путем.

1) Получить данные с оператором Select.

Мне удалось успешно получить данные таблицы с помощью запроса Select * from Tablename внутри кода pyodbc, прежде чем я попробовал оператор UPDATE.

import pyodbc
conn = pyodbc.connect('DRIVER = {ODBC Driver 17 for SQL Server};''SERVER=tcp:sqlservernamesql.database.windows.net,1433;''DATABASE=databasename; UID=siliconuser;PWD=Password;')
#conn.commit()
cursor = conn.cursor()
cursor.execute('Select * FROM StudentReviews')
#conn.commit()
for  i  in  cursor:
print(i)
cursor.close()
conn.close()

Результат:-

2) ОБНОВИТЕ строки, требующие conn.commit()

Код :-

import pyodbc
conn = pyodbc.connect('DRIVER = {ODBC Driver 17 for SQL Server};''SERVER=tcp:siliconserversql.database.windows.net,1433;''DATABASE=silicondb; UID=userid; PWD=Password;')
cursor = conn.cursor() 
#cursor.execute('Select * FROM StudentReviews')
cursor.execute("UPDATE StudentReviews SET ReviewTime = ('7') WHERE ReviewText = ('SQL DB')")
conn.commit()
cursor.close()
conn.close()

Результат:-

Оператор обновления выполнен успешно, и строка таблицы была обновлена ​​в Azure SQL, см. ниже: -

3) С автофиксацией=true

Спасибо @Gord Thompson за комментарий и предложение!

Код :-

import pyodbc
conn = pyodbc.connect('DRIVER = {ODBC Driver 17 for SQL Server};''SERVER=tcp:siliconserversql.database.windows.net,1433;''DATABASE=silicondb; UID=username; PWD=Password;', autocommit=True) 
#conn.commit()
cursor = conn.cursor()
cursor.execute("UPDATE StudentReviews SET ReviewTime = ('8') WHERE ReviewText = ('SQL DB')")
cursor.close()
conn.close()

Результаты: - При autocommit=true вам не нужно добавлять conn.commit каждый раз, когда вы обновляете базу данных SQL.

Другие вопросы по теме