python mysql使用executemany()出现TypeError
问题描述
def insertData(self,table,param):try: self.db.set_character_set(’utf8’) q= [] for x in param:cols = ’, ’.join(x.keys())values = ’',' ’.join(x.values())q.append((table, cols, ’'’+values+’'’)) sql = 'INSERT INTO %s(%s) VALUES(%s)' try:result = self.cur.executemany(sql,q)insert_id = self.db.insert_id()self.db.commit() except MySQLdb.Error,e:#发生错误时回滚self.db.rollback()except MySQLdb.Error,e: print self.getCurrentTime(),'数据库错误,原因%d: %s' % (e.args[0], e.args[1])
其中q的部分内容为[(’houseurl’, ’url’, u’'/ershoufang/szlh11469938.html'’), (’houseurl’, ’url’, u’'/ershoufang/szlh11470634.html'’)]
执行以上代码后,出现以下问题:
29 sql = 'INSERT INTO %s(%s) VALUES(%s)' 30 try:---> 31 result = self.cur.executemany(sql,q) 32 insert_id = self.db.insert_id() 33 self.db.commit()/usr/lib/python2.7/dist-packages/MySQLdb/cursors.pyc in executemany(self, query, args) 274 self.errorhandler(self, ProgrammingError, msg.args[0]) 275 else:--> 276 self.errorhandler(self, TypeError, msg) 277 except (SystemExit, KeyboardInterrupt): 278 raise/usr/lib/python2.7/dist-packages/MySQLdb/connections.pyc in defaulterrorhandler(***failed resolving arguments***) 34 del connection 35 if isinstance(errorvalue, BaseException):---> 36 raise errorvalue 37 if errorclass is not None: 38 raise errorclass(errorvalue)TypeError: not all arguments converted during string formatting
但是我一条条插入使用execute()就没问题。
问题解答
回答1:'INSERT INTO %s(%s) VALUES(%s)'
这种写法是错误的。占位符 %s 只能出现在值的地方,不能作为表名、字段名出现。.execute* 不会帮你处理这些东西。
你可以预先构造好合适的 SQL 模板,再传给 .execute*。前提是,你的表名、字段名是确定不会有特殊字符的:
fields = ...data = ...sql = ’INSERT INTO {}({}) VALUES(%s)’.format(table, fields)cur.executemany(sql, data)
相关文章:
1. vue.js - android环境下在vue中引入vux.js 报错。2. 无法为JSP编译类:无法解析类型java.util.Map $ Entry。从所需的.class文件间接引用它3. 第6行的$_GET[’F’]没有定义啊?求问一下是什么意思?4. tp5.0|php8.0 在window系统上写定时任务,执行报错5. javascript - 一排三个框,各个框的间距是15px,距离外面的白框间距也是15px,这个css怎么写?6. javascript - 拿到美工/UI的PSD图,接下来写前端页面的顺序,求指导7. 用python3的smtplib库发邮件一直返回无法发送邮件提示,是什么原因?8. java - springboot 修改默认静态资源文件读取路径9. javascript - 怎么写一个函数,传一个字符串()进去可以实现各种日期形式的增减?并且考虑到当月是28,30,31天10. javascript - 怎样优化网页打开速度呢?

网公网安备