[英]Updating MySQL DB Using Python For Loop Does not Work
我試圖通過循環通過特定文本文件中的設備列表將數據從“活動”更新為“退役”。
然而,不知何故,它不會從文本文件中過濾設備列表並更新相應的數據,根本不會對數據庫進行任何更改。
它可能與我的for語句或我提出的mysql語句有關嗎? 無論我修復MYSQL多少次,它仍然會產生相同的結果。
可能是什么問題呢?
請查看下面的代碼,看看我是否有任何關於MYSQL或Python方面的錯誤。
提前感謝您的大力幫助。 非常感激。
import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
'Server=############;'
'Database=########;'
'Trusted_Connection=yes;')
cursor = conn.cursor()
cursor.execute('SELECT id, device_id, model_number, serial_number_1,\
status_1, user_name_1 FROM [Footprint].[fpscdb001_cmdb_004].[desktop]')
results = []
with open('H:\list.txt') as inputfile:
results = inputfile.read().splitlines()
SQL = """UPDATE [Footprint].[fpscdb001_cmdb_004].[desktop]
SET status_1 = "Retired"
WHERE device_id == %s"""
try:
for i in results:
cursor.execute(SQL, results[i])
cursor.commit()
# print(rowcount)
except:
conn.rollback()
finally:
conn.close()
看起來問題是你的SQL和你的Python。
您的SQL在此部分存在問題: WHERE device_id == %s
。 在SQL中,沒有==
。 相反,您使用單個=
來設置和檢查值。 你應該使用WHERE device_id = ?
。
此外,您在查詢中使用%s
作為占位符。 我不熟悉pyodbc,但快速檢查文檔看起來你應該使用?
作為占位符。
試試這個:
SQL = """UPDATE [Footprint].[fpscdb001_cmdb_004].[desktop]
SET status_1 = "Retired"
WHERE device_id = ?"""
在@RToyo寫的答案的基礎上,你可以更快地做到這一點
我們可以建立一個“?”列表 SQL中的占位符,然后將每個項安全地傳遞給ODBC持有者,使用*表示法將設備ID的數組分解為ODBC execute()
函數。 這允許您既可以執行一個查詢,也可以安全地執行
import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
'Server=############;'
'Database=########;'
'Trusted_Connection=yes;')
cursor = conn.cursor()
cursor.execute('SELECT id, device_id, model_number, serial_number_1,\
status_1, user_name_1 FROM [Footprint].[fpscdb001_cmdb_004].[desktop]')
results = []
with open('H:\list.txt') as inputfile:
results = inputfile.read().splitlines()
SQL = """UPDATE [Footprint].[fpscdb001_cmdb_004].[desktop]
SET status_1 = "Retired"
WHERE device_id in ({})""".format(("?, " * len(results))[0:-2])
try:
if len(results) > 0:
cursor.execute(SQL, *results)
except:
conn.rollback()
finally:
conn.close()
希望這有助於某人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.