【问题标题】:Executemany not working (adding data to mysql)Executemany 不工作(向 mysql 添加数据)
【发布时间】:2015-07-02 20:49:45
【问题描述】:

您好,我一直在尝试使用 execute many 向 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 不插入数据。我尝试使用列表、元组、带有元组的列表,但没有任何效果。即使有一条记录来测试它也不会插入任何东西。

【问题讨论】:

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

标签: python mysql


【解决方案1】:

我猜 moose 的第一个答案是正确的。但我使用了已注释的 #%(elem_name、cell_name、site_no、alarm_severity、ne_type、alarm_name、date、alarms)的组合,我在某处感到困惑,因为我试图弄清楚找出错误和出了什么问题。无论如何这现在有效:

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()

感谢大家的帮助

【讨论】:

    猜你喜欢
    • 2012-09-29
    • 2014-08-19
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    相关资源
    最近更新 更多