我有一個名為 df2 的資料框,其中包含以下列:
IN: df2.columns
Out:
Index(['Section Names', 'Job Code', 'Job Title', 'Footnotes', 'Rates',
'Wage Determination', 'Revision Date', 'Revision Number'],
dtype='object')
我將其計為 8 列。
我已將列名保存到 cols 中:
IN: cols = "','".join([str(i) for i in df2.columns.tolist()])
IN: print(cols)
OUT: Section Names','Job Code','Job Title','Footnotes','Rates','Wage Determination','Revision Date','Revision Number
同樣,我看到 8 列。
而且,在 Access 中,我有一個包含這些列的表(目前沒有一個被指定為主鍵):
Section Name
Job Code
Job Title
Footnotes
Rates
Wage Determination
Revision Date
Revision Number
這是8列。我嘗試執行此代碼以使用來自 df2 的資料填充 test_table:
for i, row in df2.iterrows():
sql = "INSERT INTO `test_table` (`" cols "`) VALUES (?,?,?,?,?,?,?,?)"
cursor.execute(sql, tuple(row))
conn.commit()
但我收到此錯誤:
Error: ('21S01', '[21S01] [Microsoft][ODBC Microsoft Access Driver] Number of query values and destination fields are not the same. (-3520) (SQLExecDirectW)')
我在想這是因為它試圖插入索引,并且index_col = 0在讀取 csv 檔案(分配給 df2)時做了。但是,這將列數減少了 1,并且我相應地調整了 cols 值和VALUESsql 陳述句,但我遇到了同樣的錯誤。
有任何想法嗎?TIA。
編輯我認為這可能是資料型別問題。我將 Access 中的所有資料型別更改為“短文本”,并將資料型別df2更改為物件。還是同樣的錯誤。
uj5u.com熱心網友回復:
在 MS Access 中,您需要用空格和/或特殊字符為表或列名加上方括號或反引號。現在,您在 SQL 陳述句中使用單引號,str.join然后在 SQL 陳述句中使用反引號。簡單地說,在兩個字串中使用反引號或方括號:
# DELIMIT WITH BACK TICKS
cols = "`, `".join(i for i in df2.columns)
qmarks = ", ".join('?' for _ in df2.columns)
# USING F-STRING
sql = f"INSERT INTO `test_table` (`{cols}`) VALUES ({qmarks})"
for i, row in df2.iterrows():
cursor.execute(sql, tuple(row))
conn.commit()
甚至考慮executemany:
cols = "`, `".join(i for i in df2.columns)
qmarks = ", ".join('?' for _ in df2.columns)
sql = f"INSERT INTO `test_table` (`{cols}`) VALUES ({qmarks})"
vals = df2.to_numpy().tolist()
cursor.executemany(sql, vals)
conn.commit()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/429058.html
