「not all arguments converted during string formatting」in pymysql
可能的原因:
- 參數個數不一致
- 資料無法轉換(可能因為資料的型態,或是資料的長度)
- 語法中的?要改為%s
- 搭配「ON DUPLICATE KEY UPDATE」時,不可採用之前的寫法
#之前的寫法
sqlquery = 'INSERT INTO table_A(column_A, column_B, column_C) values(%s,%s,%s) ON DUPLICATE KEY UPDATE column_A=%s,column_B=%s,column_C=%s'
...
cursor.executemany(query_string, tuple_args) #tuple_args裏的參數單位為6個
conn.commit()
#應該改為
sqlquery = 'INSERT INTO table_A(column_A, column_B, column_C) values(%s,%s,%s) ON DUPLICATE KEY UPDATE column_A=values(column_A),column_B=values(column_B),column_C=values(column_C)'
...
cursor.execute(query_string, tuple_args) #tuple_args裏的參數單位為3個
conn.commit()
如果插入的資料中有整數數值,在sql中,仍然是使用%s攜帶參數。但在參數args中,使用該型態插入。
#假設column_C在table中的資料型態是整數
sqlquery = 'INSERT INTO table_A(column_A, column_B, column_C) values(%s,%s,%s) ON DUPLICATE KEY UPDATE column_A=values(column_A),column_B=values(column_B),column_C=values(column_C)'
tuple_args.append(stringA, stringB, int(stringC))
...
cursor.executemany(query_string, tuple_args)
conn.commit()