记录一下今天使用pymysql遇到的一个小小的问题,其实说是坑,不如说是自己平时没有注意的一个细节,写下来,加深一下印象。
问题描述
为了提高效率,使用executemany一次性执行多条sql语句,将所有的数据库操作都封装到了类中,以下只把问题中用到的代码抽象如下:
def update(self, data_list):
"""将列表中的数据更新到数据库中"""
sql_str = "UPDATE score_new SET grade=%d"
try:
self.cur.executemany(sql_str, data_list)
self.conn.commit()
except Exception as e:
traceback.print_exc(e)
finally:
self.close_connect()
实例化db对象后,调用以上函数对多行sql更新,示例如下:
if __name__ == '__main__':
db = DB()
db.update([90, 78 , 89])
执行之后,结果如下:
提示数据类型不正确,需要一个数字类型而不是字符串类型,可是数据库中要更新的字段类型明明是int类型,而且单条语句执行的时候是没有问题。
解决方法
使用executemany时,第1个参数中所有的变量统统用%s格式化即可,如下:
sql_str = "UPDATE score_new set grade=%s"
再执行就成功了。具体的原因跟了一下源码也没找到,姑且这么记下来吧。