В настоящее время я разрабатываю программу на python, которая взаимодействует с несколькими базами данных. Я использую pyodbc для подключения и выполнения запросов. Одна из баз данных — это лазурная база данных. Я заметил, что иногда отправленные данные не обновляются в базе данных, хотя программа работает успешно и ошибок не возникает. Существуют ли какие-либо методы, которым я должен следовать, чтобы этого не произошло, или это связано с моим кодом или проблемой с подключением к базе данных? Я начинающий. Буду признателен за помощь всем спасибо!
Также следует ли запускать строку .commit() после каждого запуска sql?
Программа должна обновлять строку данных в базе данных на основе условия, этот конкретный запрос иногда не действует, но ошибки не возникает. После этого я также выполнил несколько запросов, для следующих запросов не было обнаружено проблем. Он успешно выполнен.
запрос представляет собой простой запрос, который
UPDATE DraftVReg SET VRStatus = 'Potential Duplicate Found' WHERE RowID = ?
Проведите несколько тестов, используя pyodbc.connect(connection_string, autocommit=True)
. Если проблема исчезнет, значит, в вашем коде где-то отсутствует вызов .commit()
.
Я попытался воспроизвести ваш сценарий со своей стороны и смог обновить строку 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.
Если ваше обновление запускается, но не влияет на базу данных, скорее всего, вы пропустили вызов
commit()
. Но невозможно быть уверенным. Вы не показали нам ни одного кода Python, который не делает то, что вы ожидаете. Вы просите нас представить то, что вы написали, а затем сказать вам, в чем может быть проблема.