python pymysql注意事项

cursor.execute 与 cursor.executemany有许多不同的地方

1. execute 中字段的值是字符串形式时必须加引号,但是executemany只需要使用占位符%s,pymysql利用给的参数list自动会加上引号

2.execute返回结果都是数字,但是executemany返回结果为none和数字

3.executemany之后执行fetchall,只能返回最后一条语句执行的结果(例如执行select时)

4.insert时,如果量比较大,最好拼接value然后用execute执行,如果用executemany(sql, datalist)执行的话速度太慢。

execute十万条 12秒

2016-07-15 16:24:42,177 DEBUG    my_mysql.py listsave 172      sql execute
2016-07-15 16:24:42,177 DEBUG    my_mysql.py listsave 173      insert into `strategy_set` (`paramete_set_id`,`m`,`n`,`p`,`strategy`,`need_update`) (...
2016-07-15 16:24:54,394 DEBUG    my_mysql.py listsave 175      sql executemany num: 128801

executemany十万条 26秒

2016-07-15 16:27:57,545 DEBUG    my_mysql.py listsave 162      insert into `strategy_set` (`paramete_set_id`,`m`,`n`,`p`,`strategy`,`need_update`) VALUES (%s,%s,%s,%s,%s,%s) ON duplicate KEY UPDATE `need_update`=0
2016-07-15 16:27:57,545 DEBUG    my_mysql.py listsave 163      [[37, 1, 2, 10, 'dzyj', 1], [37, 1, 2, 11, 'dzyj', 1], [37, 1, 2, 12, 'dzyj', 1], [37, 1, 2, 13, 'dzyj', 1], [37, 1, 2, 14, 'dzyj', 1], [37, 1, 2, 15, 'dzyj', 1], [37, 1, 2, 16, 'dzyj', 1], [37, 1, 2, 17, 'dzyj', 1], [37, 1, 2, 18, 'dzyj', 1], [37, 1, 2, 19, 'dzyj', 1]]...
2016-07-15 16:28:23,786 DEBUG    my_mysql.py listsave 165      sql executemany num: 128801


ps:如果在sql存入或更新数据时不加引号,则默认为数字,再根据数据库中字段的类型进行转换。

如果存入000333到varchar字段中,则会得到333值。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python pymysql 是一个Python的MySQL数据库驱动程序,它可以让我们方便地使用Python操作MySQL数据库。而事务是指作为一个单独的、不可分割的工作单位执行的一系列操作,只有所有操作都执行成功,才能提交事务;如果任意一个操作失败,就必须回滚事务,撤销已经执行的所有操作。下面介绍一下Python pymysql 中的事务处理。 在 Python pymysql 中,可以使用 connection 对象的 begin() 方法开启一个事务,使用 commit() 方法提交事务,使用 rollback() 方法回滚事务。当开启事务后,在所有的操作中,只有最后执行 commit() 才会将所有的操作提交到数据库中。 例如,下面的代码演示了如何使用 Python pymysql 开启事务、插入数据、更新数据和提交事务: ``` import pymysql # 连接数据库 conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='test') try: # 开启事务 conn.begin() # 插入数据 cursor = conn.cursor() cursor.execute("INSERT INTO student (name, age) VALUES ('Tom', 18)") # 更新数据 cursor.execute("UPDATE student SET age = 20 WHERE name = 'Tom'") # 提交事务 conn.commit() except Exception as e: # 回滚事务 conn.rollback() finally: # 关闭连接 conn.close() ``` 在上面的代码中,我们使用了 try...except...finally 来处理异常和关闭连接,使用 conn.begin() 开启事务,使用 conn.commit() 提交事务,使用 conn.rollback() 回滚事务。注意,如果在执行过程中出现了异常,就会跳转到 except 语句块,执行回滚操作,撤销已经执行的所有操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值