Python操作MySQL数据库的方法


Posted in Python onJune 20, 2018

pymsql

pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。

下载安装

pip3 install pymysql

使用操作

1、执行SQL

import pymysql
# 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
# 创建游标
cursor = conn.cursor()
# 执行SQL,并返回收影响行数
effect_row = cursor.execute("update hosts set host = '1.1.1.2'")
# 执行SQL,并返回受影响行数
#effect_row = cursor.execute("update hosts set host = '1.1.1.2' where nid > %s", (1,))
# 执行SQL,并返回受影响行数
#effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()

2、获取新创建数据自增ID

import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
cursor = conn.cursor()
cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])
conn.commit()
cursor.close()
conn.close()
# 获取最新自增ID
new_id = cursor.lastrowid

3、获取查询数据

import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
cursor = conn.cursor()
cursor.execute("select * from hosts")
# 获取第一行数据
row_1 = cursor.fetchone()
# 获取前n行数据
# row_2 = cursor.fetchmany(3)
# 获取所有数据
# row_3 = cursor.fetchall()
conn.commit()
cursor.close()
conn.close()

注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

cursor.scroll(1,mode='relative') # 相对当前位置移动
cursor.scroll(2,mode='absolute') # 相对绝对位置移动

4、fetch数据类型

关于默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:

import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
# 游标设置为字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
r = cursor.execute("call p1()")
result = cursor.fetchone()
conn.commit()
cursor.close()
conn.close()

数据库补充

导出现有数据库数据:

mysqldump -u用户名 -p密码 数据库名称 >导出文件路径           # 结构+数据

mysqldump -u用户名 -p密码 -d 数据库名称 >导出文件路径       # 结构

导入现有数据库数据:

mysqldump -uroot -p密码  数据库名称 < 文件路径

MySQL中四种常用存储引擎的介绍

(1):MyISAM存储引擎:不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表

支持3种不同的存储格式,分别是:静态表;动态表;压缩表

静态表:表中的字段都是非变长字段,这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多(因为存储时会按照列的宽度定义补足空格)ps:在取数据的时候,默认会把字段后面的空格去掉,如果不注意会把数据本身带的空格也会忽略。

动态表:记录不是固定长度的,这样存储的优点是占用的空间相对较少;缺点:频繁的更新、删除数据容易产生碎片,需要定期执行OPTIMIZE TABLE或者myisamchk-r命令来改善性能

压缩表:因为每个记录是被单独压缩的,所以只有非常小的访问开支

(2)InnoDB存储引擎*

该存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM引擎,写的处理效率会差一些,并且会占用更多的磁盘空间以保留数据和索引。
InnoDB存储引擎的特点:支持自动增长列,支持外键约束

(3):MEMORY存储引擎

Memory存储引擎使用存在于内存中的内容来创建表。每个memory表只实际对应一个磁盘文件,格式是.frm。memory类型的表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。
MEMORY存储引擎的表可以选择使用BTREE索引或者HASH索引,两种不同类型的索引有其不同的使用范围

Hash索引优点:

Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。
Hash索引缺点: 那么不精确查找呢,也很明显,因为hash算法是基于等值计算的,所以对于“like”等范围查找hash索引无效,不支持;

Memory类型的存储引擎主要用于哪些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地对中间结果进行分析并得到最终的统计结果,。对存储引擎为memory的表进行更新操作要谨慎,因为数据并没有实际写入到磁盘中,所以一定要对下次重新启动服务后如何获得这些修改后的数据有所考虑。

(4)MERGE存储引擎

Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。

总结

以上所述是小编给大家介绍的Python操作MySQL数据库的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python文件比较示例分享
Jan 10 Python
Python实现的Kmeans++算法实例
Apr 26 Python
python的Template使用指南
Sep 11 Python
python删除特定文件的方法
Jul 30 Python
Python抓取手机号归属地信息示例代码
Nov 28 Python
Python绘制3d螺旋曲线图实例代码
Dec 20 Python
python和pygame实现简单俄罗斯方块游戏
Feb 19 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
将Python代码打包成.exe可执行文件的完整步骤
May 12 Python
Python正则表达式中flags参数的实例详解
Apr 01 Python
python实现抖音视频批量下载
Jun 20 #Python
Python 类的特殊成员解析
Jun 20 #Python
python实现音乐下载的统计
Jun 20 #Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 #Python
python基于http下载视频或音频
Jun 20 #Python
python实现下载pop3邮件保存到本地
Jun 19 #Python
python+POP3实现批量下载邮件附件
Jun 19 #Python
You might like
PHP使用mysql_fetch_row查询获得数据行列表的方法
2015/03/18 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
js三种排序算法分享
2012/08/16 Javascript
jquery实现点击TreeView文本父节点展开/折叠子节点
2013/01/10 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
Python如何将函数值赋给变量
2020/04/28 Python
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
大学军训感言
2014/01/10 职场文书
大学生就业意向书范文
2014/04/01 职场文书
企业口号大全
2014/06/12 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL