Python Executemany不工作(向mysql添加数据)

Python Executemany不工作(向mysql添加数据),python,mysql,Python,Mysql,您好,我一直在尝试使用executemany向mysql添加数据。我花了几个小时搜索和尝试,但都没用。 以下是我的部分代码: values = [("BEAFS","RBS00167","167","A1","BSC","RADIO X-CEIVER ADMINISTRATION" ,"2015-04-07 12:10:00" ,"FUEL TANK ALARM G167-KARTERES")] db = MySQLdb.connect("localhost","root","","

您好,我一直在尝试使用executemany向mysql添加数据。我花了几个小时搜索和尝试,但都没用。 以下是我的部分代码:

values = [("BEAFS","RBS00167","167","A1","BSC","RADIO X-CEIVER   ADMINISTRATION" ,"2015-04-07 12:10:00" ,"FUEL TANK ALARM G167-KARTERES")]   

db = MySQLdb.connect("localhost","root","","alarmsdb")
cursor = db.cursor()
sql = """INSERT INTO ALARMS_VF (elem_name, cell_name, site_no, alarm_severity,ne_type, alarm_name, alarm_raised_time, location_info) \
                               VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')""" #% (elem_name, cell_name, site_no, alarm_severity, ne_type, alarm_name, date, alarms)

   try:
      cursor.executemany(sql,values)
      db.commit()
   except:
      db.rollback()
 db.close()

我已经尝试了一切
execute
工作正常,但是
executemany
不插入数据。我试着用一个列表,元组,带元组的列表,但都不起作用。即使只有一条记录进行测试,它也不会插入任何内容。

我猜moose的第一个答案是正确的。但我使用了注释的#%(元素名、单元名、站点号、报警严重性、ne类型、报警名、日期、报警)的组合当我试图找出错误和哪里出了问题时,我在某个地方感到困惑。无论如何,这现在起作用了:

values = [("BEAFS","RBS00167","167","A1","BSC","RADIO X-CEIVER ADMINISTRATION" ,"2015-04-07 12:10:00" ,"FUEL TANK ALARM G167-KARTERES")]  
                if alarm_name.startswith("RADIO X") and alarms != '' or alarm_name.startswith("CELL LOGICAL"):
                    db = MySQLdb.connect("localhost","root","","alarmsdb")
                    cursor = db.cursor()
                    sql = """INSERT INTO ALARMS_VF (elem_name, cell_name, site_no, alarm_severity,ne_type, alarm_name, alarm_raised_time, location_info) \
                               VALUES ( %s, %s, %s, %s, %s, %s, %s, %s)""" #% (elem_name, cell_name, site_no, alarm_severity, ne_type, alarm_name, date, alarms)

                    #try:
                    cursor.executemany(sql,values)
                    db.commit()
                    #except:
                        #db.rollback()
                    db.close()

谢谢大家的帮助

您知道使用
executemany()
是否会导致异常和回滚吗?如果是这样的话,也许值得一看这个例外情况您的查询不应该有
'%s'
,而是应该有
%s
。您应该使用而不是
MySQLdb
。毫无例外地抛出TypeError:在字符串格式化过程中并非所有参数都转换。但是用“执行”只不过没有这个消息,它似乎起作用了,这意味着它正在起作用。至于没有引号的%s,在阅读教程和尝试所有东西之前都试过了,因为它不起作用,而且仍然不起作用。@moose:为什么要用一个有点模糊的包而不是一个已知的稳定包?@Evangelos:your bare
except
子句你不知道哪里出了问题。在
db.rollback()
之后添加一个
raise
语句,您将得到一个很好的回溯,其中包含尽可能多的关于错误的提示,而不是脚本什么都不做。异常和回溯实际上是为了帮助您,所以不要让它们沉默。