Rumah > Soal Jawab > teks badan
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()就没问题。
伊谢尔伦2017-04-18 10:35:38
"INSERT INTO %s(%s) VALUES(%s)"
Cara penulisan ini salah. Pemegang tempat %s
hanya boleh muncul sebagai nilai dan tidak boleh muncul sebagai nama jadual atau nama medan. .execute* tidak akan mengendalikan perkara ini untuk anda.
Anda boleh pra-membina templat SQL yang sesuai dan menyerahkannya kepada .execute*. Premisnya ialah nama jadual dan nama medan anda tidak boleh mengandungi aksara khas:
fields = ...
data = ...
sql = 'INSERT INTO {}({}) VALUES(%s)'.format(table, fields)
cur.executemany(sql, data)