使用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 相关文章推荐
Phantomjs抓取渲染JS后的网页(Python代码)
May 13 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
Sep 21 Python
Python简单的制作图片验证码实例
May 31 Python
详解 Python 读写XML文件的实例
Aug 02 Python
Python2与Python3的区别实例总结
Apr 17 Python
11个Python3字典内置方法大全与示例汇总
May 13 Python
python函数与方法的区别总结
Jun 23 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 Python
pytorch 自定义参数不更新方式
Jan 06 Python
Python序列化pickle模块使用详解
Mar 05 Python
Python自定义聚合函数merge与transform区别详解
May 26 Python
Python学习之异常中的finally使用详解
Mar 16 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
mysql数据库差异比较的PHP代码
2012/02/05 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
php单链表实现代码分享
2016/07/04 PHP
PHP静态成员变量
2017/02/14 PHP
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
Python三元运算实现方法
2015/01/12 Python
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
网络信息管理员岗位职责
2014/01/05 职场文书
工艺员岗位职责
2014/02/11 职场文书
金融专业求职信
2014/08/05 职场文书
鲁迅故居导游词
2015/02/05 职场文书
离婚被告代理词
2015/05/23 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
Python进度条的使用
2021/05/17 Python
2021年最新用于图像处理的Python库总结
2021/06/15 Python
服务器nginx权限被拒绝解决案例
2022/09/23 Servers