【发布时间】: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语句,您将获得一个很好的回溯,其中包含尽可能多的有关错误的提示,而不是您的脚本什么都不做。异常和回溯实际上是为了帮助你,所以不要让它们沉默。