python mysql使用executemany()出现TypeError
巴扎黑
巴扎黑 2017-04-18 10:33:38
0
1
632
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)
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!