使用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之PyUnit单元测试实例
Oct 11 Python
python字典get()方法用法分析
Apr 17 Python
python 字典修改键(key)的几种方法
Aug 10 Python
Python地图绘制实操详解
Mar 04 Python
使用Python控制摄像头拍照并发邮件
Apr 23 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
Jun 08 Python
python爬虫爬取幽默笑话网站
Oct 24 Python
Python实现打印实心和空心菱形
Nov 23 Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 Python
opencv 图像轮廓的实现示例
Jul 08 Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 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
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
[对联广告] JS脚本类
2006/08/27 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
JavaScript 验证码的实例代码(附效果图)
2013/03/22 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
Python中编写ORM框架的入门指引
2015/04/29 Python
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
Python 中如何写注释
2020/08/28 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
简历中个人自我评价范文
2013/12/26 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
事假请假条范文
2014/04/11 职场文书
2014年无财产无子女离婚协议书范本
2014/10/09 职场文书
毕业酒会致辞
2015/07/29 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers