我目前有一個使用測試條目創建的 sqlite 表,并且需要能夠使用用戶的詢問字符串來更新數據庫中條目的機架和機架定位位置(如下所示)# Move asset to another location in depotdef move_data_to_rack(): serial_to_move = askstring('Move Asset', 'Please enter the Serial Number you want to move') serial_to_move = serial_to_move.upper() to_rack = askstring('Move Asset', 'Please enter the Rack you want to move to') to_rack = to_rack.upper() to_rack_loc = askstring('Move Asset', 'Please enter the Rack LOC you want to move to') to_rack_loc = to_rack_loc.upper() cursor.execute('''UPDATE depot_racks SET rack, rackloc = ?, ? WHERE serial = ?''', (to_rack, to_rack_loc, serial_to_move,)) db.commit() messagebox.showinfo('Serial Moved', serial_to_move + ' has now been moved to ' + to_rack + to_rack_loc)該表的創建如下...# Depot Table creationcursor.execute(''' CREATE TABLE IF NOT EXISTS depot_racks( id INTEGER PRIMARY KEY, rack TEXT, rackloc TEXT, floorzone TEXT, product TEXT, serial TEXT, status TEXT, entdate TEXT, servdate TEXT, parts TEXT, pat TEXT)''')當上面的函數運行時,我收到以下錯誤...Exception in Tkinter callbackTraceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py", line 1883, in __call__ return self.func(*args) File "/Users/grantpeach/Library/Mobile Documents/com~apple~CloudDocs/Programming/Python Programming/Personal Projects/Arjo RackSys/RackSysMain.py", line 104, in move_data_to_rack cursor.execute('''UPDATE depot_racks SET rack, rackloc = ?, ? WHERE serial = ?''', (to_rack, to_rack_loc, serial_to_move,))sqlite3.OperationalError: near ",": syntax error因此,該功能背后的想法是,用戶將添加他們想要更新的序列號,然后輸入新的機架位置(例如 RACK1)和新的機架位置(例如 A)。然后,這應該找到序列號,并且僅使用該序列更新該行的機架和機架鎖定部分。非常感謝任何幫助
1 回答

慕桂英4014372
TA貢獻1871條經驗 獲得超13個贊
每個?
占位符必須分配給相應的列名稱:
cursor.execute('''UPDATE?depot_racks?SET?rack?=??,?rackloc?=???WHERE?serial?=??''',?(to_rack,?to_rack_loc,?serial_to_move,))
如果您的 SQLite 版本是 3.15.0+,您還可以使用行值語法:
cursor.execute('''UPDATE?depot_racks?SET?(rack,?rackloc)?=?(?,??)?WHERE?serial?=??''',?(to_rack,?to_rack_loc,?serial_to_move,))
添加回答
舉報
0/150
提交
取消