首先,我已經閱讀了所有類似的問題并應用了此處列出的解決方案:[1] SQLite with Python "Table has X columns but Y were provided",[1] "Table has X columns but Y values were provided" 錯誤,3 sqlite3.OperationalError:表 card_data 有 11 列但提供了 10 個值,[4] sqlite3.OperationalError:表 book 有 6 列,但提供了 5 個值,[5] Sqlite3 表用戶有 7 列,但提供了 6 個值然而,沒有他們解決了。
我正在使用此創建 26 個表成功插入資料:
im.execute("""CREATE TABLE IF NOT EXISTS C_Socket7 (Date_Requested, Time_Requested, Time_Passed, Energy_Consumption, Cumulative_Consumption, Hourly_Consumption, Daily_Consumption, Weekly_Consumption, Monthly_Consumption)""")
string = """INSERT INTO {} VALUES ('{}','{}','{}','{}','{}','{}','{}','{}')""".format('C_' tables[7], tstr, dict4DB['timePassed'], dict4DB['Socket7Consp'],DummyConsumptions['Cumulative'], DummyConsumptions['Hourly'], DummyConsumptions['Daily'], DummyConsumptions['Weekly'], DummyConsumptions['Monthly'])
和這個代碼:
im.execute("""CREATE TABLE IF NOT EXISTS A_Status (Time_Requested, Socket0Status, Socket1Status, Socket2Status, Socket3Status, Socket4Status, Socket5Status, Socket6Status, Socket7Status)""")
string = """INSERT INTO {} VALUES ('{}','{}','{}','{}','{}','{}','{}','{}','{}')""".format('A_' tables[7], tstr, dict4DB['Socket0Stat'], dict4DB['Socket1Stat'],dict4DB['Socket2Stat'], dict4DB['Socket3Stat'], dict4DB['Socket4Stat'], dict4DB['Socket5Stat'], dict4DB['Socket6Stat'], dict4DB['Socket7Stat'])
但是當談到這張表時:
im.execute("""CREATE TABLE IF NOT EXISTS A_Environment (Date_Requested, Time_Requested, Voltage, Frequency, In_Temperature, In_Humidity, Ext_Temperature, Ext_Humidity, Door_Switch, Door_Relay)""")
string = """INSERT INTO A_Environment(Date_Requested, Time_Requested, Voltage, Frequency, In_Temperature, In_Humidity, Ext_Temperature, Ext_Humidity, Door_Switch, Door_Relay) VALUES ('{}','{}', '{}','{}','{}','{}','{}','{}','{}','{}')""".format(d_str, h_str, dict4DB['Voltage'], dict4DB['Frequency'],dict4DB['InTemp'], dict4DB['InHumidity'], dict4DB['ExtTemp'], dict4DB['ExtHumidity'], dict4DB['DoorSwitch'], dict4DB['DoorRelay'])
它給出了錯誤:
sqlite3.OperationalError: table A_Environment has 10 columns but 9 values were supplied
當我使用“DB Browser for SQLite”檢查資料庫時,我看不到列名。當我使用界面手動創建列時,我得到同樣的錯誤。
這是從資料庫瀏覽器中查看的螢屏截圖:[
]
當結構是這樣的時候它作業正常:
im.execute("""CREATE TABLE IF NOT EXISTS A_Environment (Time_Requested, Voltage, Frequency, In_Temperature, In_Humidity, Ext_Temperature, Ext_Humidity, Door_Switch, Door_Relay)""")
string = """INSERT INTO {} VALUES ('{}','{}','{}','{}','{}','{}','{}','{}','{}')""".format('A_' tables[6], tstr, dict4DB['Voltage'], dict4DB['Frequency'],dict4DB['InTemp'], dict4DB['InHumidity'], dict4DB['ExtTemp'], dict4DB['ExtHumidity'], dict4DB['DoorSwitch'], dict4DB['DoorRelay'])
我已經用 'd_str' 和 'h_str' 更改了 'tstr',我將日期和時間分隔到不同的列中。
我試過這些:
- 手動創建列。得到了同樣的結果。
- 洗掉表并讓它使用“CREATE TABLE IF NOT EXISTS”創建自己,它創建了表但也沒有列。手動放置列。不作業。
- 洗掉整個資料庫,讓它從頭開始創建自己。得到了同樣的結果。
- 我還更改了 .format() 函式中提供的值,因為 str(d_str) 和 str(h_str) 也不起作用。
- 我計劃創建一個最小的作業代碼片段,以查看哪些值無法讀取,但在看到未創建列之后。我認為問題不在于要寫入的資料。
我已閱讀檔案,但找不到可以使用的內容。
這是“SQLite 資料庫瀏覽器”中表格的螢屏截圖 [
]
你有什么建議嗎?我該怎么辦?
PS:SQLite 在 Raspberry Pi、Rasbian OS、Python 3.7、SQLite3 上運行。
使用
uj5u.com熱心網友回復:
您永遠不應該使用.format()(or %or f-strings) 來生成 SQL 陳述句。您的問題可能(很難說,因為我們沒有看到您的輸入資料)源于 SQLite 錯誤解釋的未轉義值 - 實際上,您是自己的 SQL 注入漏洞。
而是使用您的資料庫提供的占位符系統,例如對于 Sqlite 像這樣:
im.execute(
"""
INSERT INTO
A_Environment(
Date_Requested,
Time_Requested,
Voltage,
Frequency,
In_Temperature,
In_Humidity,
Ext_Temperature,
Ext_Humidity,
Door_Switch,
Door_Relay
)
VALUES
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""",
(
d_str,
h_str,
dict4DB["Voltage"],
dict4DB["Frequency"],
dict4DB["InTemp"],
dict4DB["InHumidity"],
dict4DB["ExtTemp"],
dict4DB["ExtHumidity"],
dict4DB["DoorSwitch"],
dict4DB["DoorRelay"],
),
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/395482.html
