使用Python操作MySQL的一些基本方法


Posted in Python onAugust 16, 2015

前奏

为了能操作数据库, 首先我们要有一个数据库, 所以要首先安装Mysql, 然后创建一个测试数据库python_test用以后面的测试使用

CREATE DATABASE `python_test` CHARSET UTF8

导入数据库模块

import MySQLdb

连接数据库

con = MySQLdb.connect(host="localhost", user="root", passwd="******",db="python_test",port=3306)

在这里, 我们虽然拿到了python的数据库连接, 但是不能在这个对象上直接对数据库进行操作, 还需要获取对应的操作游标才能进行数据库的操作,所以还需要进行下面的操作

cur = con.cursor()

创建表格

cur.execute('create table stu_info (name char(128) not null default "", age tinyint(3) not null default 0, sex enum("man","femal") not null default "man") engine=innodb charset=utf8')
#0L

cur.execute 返回执行的sql 影响的行数, 因为这里是创建数据库, 所以是0L行

但到这里还并没有真正执行了sql语句, 必须使用MySQLdb.commit才是真正执行完毕

con.commit()

到这里, 我们的表格才算真正创建完成

同理, 往表中写数据, 也是一样的操作流程 execute ==> commit

不过, 写入数据的execute 稍有不同, 如下
更新表数据

往表中写入数据时, 执行execute 方法, 有两种方式, 一种是直接execute(sql), 然后commit 完成, sql里是写入的sql 语句

cur.execute("insert into stu_info (name, age, sex) values ('Yi_Zhi_Yu',25,'man')")
con.commit()

这会直接写入表中,但还有另外一种方式,
execute 可以接受两个参数, 第一个参数是sql语句, 不过这个sql中的values的内容使用占位符%s表示,第二个参数是实际的写入的values列表, 如下:

cur.execute("insert into stu_info (name, age, sex) values (%s,%s,%s)", ("Tony",25, "man"))
con.commit()

这种方式与第一中方式相比, 更清晰一些, 安全性也更好, 能有效防止sql注入

另外, cursor还有一个executemany, 参数和execute一样, 不过第二个参数可以传递多列表值, 达到多次执行某个语句的效果

cur.executemany("insert into stu_info (name, age, sex) values (%s,%s,%s)",(("LiMei",26,"femal"),("YuanYuan",28,"femal")))
con.commit()

这里实际上就是执行了两次插入操作
数据查询

直接看例子

cur.execute("select * from stu_info")
stus = cur.fetchall()

#stus 已经是查询的结果结合了, 格式如下:

(('Yi_Zhi_Yu', 25, 'man'),
 ('Tony', 25, 'man'),
 ('LiMei', 26, 'femal'),
 ('YuanYuan', 28, 'femal'))

tuple形式, 我们可以通过循环输出

for stu in stus:
    print "name: %s; age: %d; sex: %s" %(stu[0], stu[1], stu[2])

输出:

name: Yi_Zhi_Yu; age: 25; sex: man
name: Tony; age: 25; sex: man
name: LiMei; age: 26; sex: femal
name: YuanYuan; age: 28; sex: femal

那上面的查询虽然得到了每行的数据, 但结果集中并没有字段名, 如果要返回字段名, 如下操作:

cur = con.cursor(cursorclass=MySQLdb.cursors.DictCursor)
cur.execute("select * from stu_info")
cur.fetchall()

返回的结果集:

({'age': 25, 'name': 'Yi_Zhi_Yu', 'sex': 'man'},
 {'age': 25, 'name': 'Tony', 'sex': 'man'},
 {'age': 26, 'name': 'LiMei', 'sex': 'femal'},
 {'age': 28, 'name': 'YuanYuan', 'sex': 'femal'})

每个元素都是一个dict, 以key-value的形式展示了每个字段和对应的值
总结

Python 中对数据的操作, 增删改均要在指针对象执行了sql语句后, 使用连接对象commit, 查询的结果使用指针对象的fetch系列方法获取

PS: 以上皆为学习笔记, 难免有错, 欢迎指正

Python 相关文章推荐
Python和GO语言实现的消息摘要算法示例
Mar 10 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
Windows下Anaconda的安装和简单使用方法
Jan 04 Python
使用python实现BLAST
Feb 12 Python
python执行系统命令后获取返回值的几种方式集合
May 12 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
Django异步任务线程池实现原理
Dec 17 Python
python中有函数重载吗
May 28 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
如何用python爬取微博热搜数据并保存
Feb 20 Python
python爬虫框架feapde的使用简介
Apr 20 Python
Python中list列表的一些进阶使用方法介绍
Aug 15 #Python
Python中的super()方法使用简介
Aug 14 #Python
在Python中使用正则表达式的方法
Aug 13 #Python
简单讲解Python中的闭包
Aug 11 #Python
Python实现短网址ShortUrl的Hash运算实例讲解
Aug 10 #Python
python实现web方式logview的方法
Aug 10 #Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 #Python
You might like
让这部DC动画新作刷新你的认知
2020/03/03 欧美动漫
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
PDO::rollBack讲解
2019/01/29 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
js实现checkbox全选和反选示例
2014/05/01 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
2016/08/05 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
python抓取最新博客内容并生成Rss
2015/05/17 Python
Python中使用ElementTree解析XML示例
2015/06/02 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
python 实现list或string按指定分段
2019/12/25 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
100%羊绒:NakedCashmere
2020/08/26 全球购物
管理科学大学生求职信
2013/11/13 职场文书
文言文形式的学生求职信
2013/12/03 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
优秀员工演讲稿
2014/05/19 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
七一慰问简报
2015/07/20 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书
python多线程方法详解
2022/01/18 Python
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL