回答
你不給table
名稱
用途:
table = "class%s" %(class_name)
,而不是:
table = "class%s"
,並且在更新表時不指定result
,因爲它是字符串,請改用score
。
我想重申一次有關字符串格式的評論中所說的內容,請使用?格式,而你已經部分做到了。
編輯有關您不瞭解字符串格式的註釋。
這是字符串格式化:
cur.execute('UPDATE ' + table + ' WHERE Surname = "%s", WHERE Name = "%s", SET Score = "%s";'% (last_name, name, score))
並且這是優選的方法,你都已經部分使用:
cur.execute('INSERT INTO ' + table + ' (Surname, Name, Score) VALUES (?, ?, ?)', (last_name, name, score))
作爲此Fallenangel指出使用字符串格式化是開放的SQL注入和是因此它皺起了眉頭,因爲它是一個安全漏洞。這種情況下的問題是表不能成爲參數替換的目標,所以你有兩難的困境。您可以使用硬編碼的表名編寫代碼,或者如果這不是您需要至少測試有效表名稱的選項
如果您發現自己有此問題,可以使用sqlite3測試有效的table
問題。
table = "sometable"
mycursor.execute('SELECT name FROM sqlite_master where (name = ?)', [table])
row = mycursor.fetchall()
valid_table = False
if row:
valid_table = True
if valid_table:
(perform your sql statements here.......)
解決了這個問題,但現在新的問題的歡呼 –
cur.execute('SELECT * from {0} WHERE Name = {1};'.format(table,name)) sqlite3.OperationalError:no such column: Bob –
Bob是名稱的值 –
- 1. SQLite語句附近的語法錯誤
- 2. sqlite附近的語法錯誤
- 3. 「@domain」附近的語法錯誤SQLite
- 4. SQLITE:從附近的語法錯誤:
- 5. 附近有語法錯誤('附近「=」
- 6. SQLite:在「DATABASE」附近:語法錯誤
- 7. 「WHERE」附近:語法錯誤 - SQLite
- 8. 附近有語法錯誤「」
- 9. 附近有語法錯誤('
- 10. 附近有語法錯誤)'
- 11. 附近有語法錯誤('
- 12. 附近有語法錯誤「」
- 13. 附近有語法錯誤
- 14. 附近有語法錯誤「=」
- 15. 附近有語法錯誤「(」
- 16. 附近有語法錯誤錯誤
- 17. 錯誤:「附近有語法錯誤‘’」
- 18. 錯誤「附近有語法錯誤‘/’
- 19. 錯誤:附近有語法錯誤「14」
- 20. 「。」附近的語法錯誤。
- 21. 「*」附近的語法錯誤
- 22. 「/」附近的語法錯誤
- 23. 附近的語法錯誤╗┐
- 24. Sqlite附近的「SQL語句錯誤」。「
- 25. SQLite的錯誤:語法錯誤附近的 「PIVOT」
- 26. SQLITE錯誤E/SQLiteLog:(1)附近的 「月」:語法錯誤
- 27. SQLiteException「@Param1」語法錯誤附近的SQLite錯誤
- 28. sqlite的錯誤附近「dasani2」:語法錯誤
- 29. ELSE附近語法錯誤
- 30. 語法錯誤附近,)
不要使用字符串格式創建Sql查詢!它對Sql Injection開放。 – FallenAngel