为了账号安全,请及时绑定邮箱和手机立即绑定

python mysql executemany指定写入表

python mysql executemany指定写入表

蓝山帝景 2019-04-13 08:46:37
curs.executemany('insertintodbnamevalues(%s,%s,%s,%s)',file_value)sql语句如上,需要对dbname定义我试了在参数那里加上表名的位置,失败:file_value=[(tables,1,2,3,4)]curs.executemany('insertinto%svalues(%s,%s,%s,%s)',file_value)#报错:notallargumentsconvertedduringstringformatting用++带入表名也不行:curs.executemany('insertinto'+tables+'values(%s,%s,%s,%s)',file_value)#报错:(1136,"Columncountdoesn'tmatchvaluecountatrow1")请问该如何处理?
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

楼主,刚敲了一下代码,executemany执行时最好对应个数。
#!/usr/bin/envpython
#--coding:utf-8--
importlogging
importMySQLdb
class_MySQL(object):
def__init__(self,host,port,user,passwd,db,charset='utf8'):
self.conn=MySQLdb.connect(
host=host,
port=port,
user=user,
passwd=passwd,
db=db,
charset=charset)
defget_cursor(self):
returnself.conn.cursor()
defquery(self,sql):
cursor=self.get_cursor()
try:
cursor.execute(sql,None)
result=cursor.fetchall()
exceptException,e:
logging.error("mysqlqueryerror:%s",e)
returnNone
finally:
cursor.close()
returnresult
defexecute(self,sql,param=None):
cursor=self.get_cursor()
try:
cursor.execute(sql,param)
self.conn.commit()
affected_row=cursor.rowcount
exceptException,e:
logging.error("mysqlexecuteerror:%s",e)
return0
finally:
cursor.close()
returnaffected_row
defexecutemany(self,sql,params=None):
cursor=self.get_cursor()
try:
cursor.executemany(sql,params)
self.conn.commit()
affected_rows=cursor.rowcount
exceptException,e:
logging.error("mysqlexecutemanyerror:%s",e)
return0
finally:
cursor.close()
returnaffected_rows
defclose(self):
try:
self.conn.close()
except:
pass
def__del__(self):
self.close()
host='localhost'
port=3306
user='root'
passwd='123456'
db='foo'
mysql=_MySQL(host,port,user,passwd,db)
defcreate_table():
table="""
CREATETABLEIFNOTEXISTS`watchdog`(
`id`int(11)NOTNULLAUTO_INCREMENTPRIMARYKEY,
`name`varchar(100),
`price`int(11)NOTNULLDEFAULT0
)ENGINE=InnoDBcharset=utf8;
"""
printmysql.execute(table)
definsert_data():
params=[('dog_%d'%i,i)foriinxrange(12)]
sql="INSERTINTO`watchdog`(`name`,`price`)VALUES(%s,%s);"
printmysql.executemany(sql,params)
if__name__=='__main__':
create_table()
insert_data()
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 1446 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信