问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请教个 python mysqldb commit的问题

发布网友 发布时间:2022-04-30 02:10

我来回答

1个回答

热心网友 时间:2022-04-30 22:05

任何应用都离不开数据,所以在学习python的时候,当然也要学习一个如何用python操作数据库了。MySQLdb就是python对mysql数据库操作的模块。官方Introction : MySQLdb is an thread-compatible interface to the popular MySQL database server that provides the Python database API. 它其实相当于翻译了对应C的接口。

使用这种数据库接口大多是就是执行连接数据库->执行query->提取数据->关闭连接 这几个步骤。MySQLdb提供比较关键的对象,分别是Connection、Cursor、Result。具体使用步骤很简单先不写了,先写一些个人认为比较重要、值得注意的地方。

1、虽然在MySQLdb.Connect(host ,user , passw , db)函数中,我们经常使用的只是这几个参数,但是其实里面还有很多比如字符集、线程安全、ssl等也都是很重要的参数,使用时要身份注意。

2、当使用Connection.query()函数进行query后,connection 对象可以返回两种result,分别是store_result和use_result,store_result 将结果集存回client端,而use_result则是结果集保存在server端,并且维护了一个连接,会占用server资源。此时,不可以进行任何其他的查询。建议使用store_result,除非返回结果集(result set)过大或是无法使用limit的情形。

3、提取(fetch)数据的返回形式大多有三种情形。 as a tuple(how=0) ;as dictionaries, key=column or table.column if plicated(how=1);as dictionaries, key=table.column (how=2)

4、每次fetch,在result内部都会产生数据位置的移动,也就是说假如有10行数据,执行result.fetch_row(3,0),会得到前三行,再执行result.fetch_row(3,0),则会得到中间的三行,所以说fetch会导致position的移动。另外值得注意的是,如果使用use_result,也就是数据存储在server时,在fetch所有的条目之前,不能进行任何的query操作。

5、mysql本身不支持游标(Cursor),但是MySQLdb对Cursor进行了仿真。重要的执行query方法有execute 和 executemany 。execute方法,执行单条sql语句,调用executemany方法很好用,数据库性能瓶颈很大一部分就在于网络IO和磁盘IO将多个insert放在一起,只执行一次IO,可以有效的提升数据库性能。游标cursor具有fetchone、fetchmany、fetchall三个方法提取数据,每个方法都会导致游标游动,所以必须关注游标的位置。游标的scroll(value, mode)方法可以使得游标进行卷动,mode参数指定相对当前位置(relative)还是以绝对位置(absolute)进行移动。

6、MySQLdb提供了很多函数方法,在官方指南里没有完全罗列,使用者可以用help去看看,里面提供了很多方便的东西。

7、对于mysql来说,如果使用支持事务的存储引擎,那么每次操作后,commit是必须的,否则不会真正写入数据库,对应rollback可以进行相应的回滚,但是commit后是无法再rollback的。commit() 可以在执行很多sql指令后再一次调用,这样可以适当提升性能。

8、executemany处理过多的命令也不见得一定好,因为数据一起传入到server端,可能会造成server端的buffer溢出,而一次数据量过大,也有可能产生一些意想不到的麻烦。合理,分批次executemany是个不错的办法。

最后,我自己写了个pyMysql模块,主要是对MySQLdb提供的常用方法进行了简单的再次封装,也借此机会好好学习下MySQLdb,以及练习python的编码。该程序使用的数据库表,采用myisam引擎,所以没加上commit(),一般最好还是要加上的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
一拳一拳打峰哥是什么歌_一拳一拳打峰哥歌曲介绍 网上办理这个准生证然后没有领取不知道点到哪了然后就没法再领取 绿油油的叠词是什么? 什么的小溪叠词填空 硅胶礼品特性 华东理工大学长江学院是一本吗 东华理工大学长江学院是公办还是民办大学 东华理工大学长江学院是一所... 模压硅胶制品如何成型的 东北理工大学长江学院是公办还是民办 东华理工大学长江学院是几本大学 书店购进成语故事和数学故事共540本其中成语故事的本数是数学故事的两倍攻击? 书店购进成语故事和数学故事共540本,其中成语故事是数学故事的2倍,求数学故事 python3.4 mysqldb 模块安装的时候出现的问题,求大神告诉怎么解决?_百度... python中MySQLdb模块的connect()函数无法连接 红米note4G小米语音助手最新版在哪下载? 为什么python不能导入mysqldb模块 4个字的成语数学故事? python中mysqldb模块在pycharm叫什么 语音助手下载 钢材米重计算软件、 小学数学成语故事田忌赛马 使用python 中的MySQLdb模块读取数据,每次都要创建新的连接吗??_百度... 有没有直接算钢材怎么锯最省料的计算app python 怎样安装mysqldb模块 钢材比重用什么软件计算? 那个计算钢材理论重量的软件是什么 一个绿色工字型图标的软件,感觉是钢筋或钢结构算量软件,有知道是什么软件的大佬说下,截图如下. 华军金属重量计算器怎么运行不了 19991026塔罗牌是什么 古希腊传说中塔罗牌 windows 2003为什么MySQL服务启动不了? 王者荣耀后羿怎么出装物理伤害最高? 预算15万买混动SUV,谁更值得入手? 王者荣耀里后羿单挑的克星有哪些 王者荣耀里面什么装克制铠 不仅帅还很省油,四款高回头率国产SUV推荐,款款精品 王者荣耀后羿出装(出装顺序) 吉利星越 L 雷神 HiX 油电混动版上市娄底预售火爆 王者荣耀中后羿的出装有哪些呢? 预售价17.37万元 星越L雷神Hi·X油电混动版正式预售 吉利星越 L 雷神 HiX 油电混动版上市娄底预售火爆活动 王者荣耀后羿教学:该怎么出装克制肉盾 王者荣耀中,后羿的出装和打法思路是怎样的? 王者荣耀后羿怎么出装最厉害 超高性能还有超低油耗?5款全新爆款混动SUV即将上市 王者荣耀后羿装备详解 吉利星越L混动与比亚迪DM-i,谁更厉害? 滴滴打车兑换的车主无忧50元加油卡怎么用啊,是去加油站直接告诉他兑换券码吗 吉利星越价格? 王者荣耀英雄什么装备克制铠