import pymysql as psl
con6s = psl.connect(host='myhost',database='mydatabase',user='usr',passwd='12345')
c6s = con6s.cursor()
c6s.execute( "INSERT INTO %s (stmp,dat,tm,tc,mc,sd,rp,st,stf,stt) VALUES(?,?,?,?,?,?,?,?,?,?)" % (str(db)), (stmp,dat,tm,tc,mc,sd,rp,st,stf,stt))
con6s.commit()
con6s.close()File "C:/Users/Bwrl/Desktop/al/Time_wither_server_upload/testdb.py", line 134, in cld_sd (str(db)), (stmp,dat,tm,tc,mc,sd,rp,st,stf,stt))
File "C:\Users\Bwrl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pymysql\cursors.py", line 164, in execute query = self.mogrify(query, args)
File "C:\Users\Bwrl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pymysql\cursors.py", line 143, in mogrify query = query % self._escape_args(args, conn)
TypeError: not all arguments converted during string formatting我反复检查了所有这些变量多次,所有变量的类型都是可以的.
发布于 2017-04-28 11:32:40
你的execute电话出问题了。
您已经使用string format和execute args混合了%。
您需要将%替换为,,并使用string.format将string format移出。
sql_cmd = """INSERT INTO
{} (stmp,dat,tm,tc,mc,sd,rp,st,stf,stt)
VALUES(?,?,?,?,?,?,?,?,?,?)""".format(table_name)
c6s.execute(sql_cmd, (stmp,dat,tm,tc,mc,sd,rp,st,stf,stt))cursor.execute原型
cursor.execute(sql, (args,))这是官方文件
发布于 2017-04-28 11:38:12
在这个.execute调用中,您应该只将db传递给%字符串内插运算符,但是%认为您也在尝试插值这些其他变量,因此您需要更改括号:
c6s.execute(("INSERT INTO %s (stmp,dat,tm,tc,mc,sd,rp,st,stf,stt) VALUES(?,?,?,?,?,?,?,?,?,?)" % str(db)), (stmp,dat,tm,tc,mc,sd,rp,st,stf,stt))如果db是一个可以简化为
c6s.execute(("INSERT INTO %s (stmp,dat,tm,tc,mc,sd,rp,st,stf,stt) VALUES(?,?,?,?,?,?,?,?,?,?)" % db), (stmp,dat,tm,tc,mc,sd,rp,st,stf,stt))虽然我倾向于把它分成两部分,以便更容易读懂:
cmd = ("INSERT INTO %s (stmp,dat,tm,tc,mc,sd,rp,st,stf,stt) "
"VALUES(?,?,?,?,?,?,?,?,?,?)" % db)
c6s.execute(cmd, (stmp,dat,tm,tc,mc,sd,rp,st,stf,stt))https://stackoverflow.com/questions/43679070
复制相似问题