「not all arguments converted during string formatting」in pymysql

可能的原因:

  1. 參數個數不一致
  2. 資料無法轉換(可能因為資料的型態,或是資料的長度)
  3. 語法中的?要改為%s
  4. 搭配「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()