使用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中sets模块的用法实例
Sep 30 Python
使用Python脚本将绝对url替换为相对url的教程
Apr 24 Python
Python常用小技巧总结
Jun 01 Python
Python网络爬虫项目:内容提取器的定义
Oct 25 Python
python十进制和二进制的转换方法(含浮点数)
Jul 07 Python
python使用webdriver爬取微信公众号
Aug 31 Python
使用Scrapy爬取动态数据
Oct 21 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
Dec 12 Python
python 获取url中的参数列表实例
Dec 18 Python
python求最大值,不使用内置函数的实现方法
Jul 09 Python
python解析多层json操作示例
Dec 30 Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 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
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
记录Django开发心得
2014/07/16 Python
Python字符串格式化
2015/06/15 Python
Python中return语句用法实例分析
2015/08/04 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
浅谈对yield的初步理解
2017/05/29 Python
查看django版本的方法分享
2018/05/14 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
使用Python实现画一个中国地图
2019/11/23 Python
Python for i in range ()用法详解
2020/09/18 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
普罗米修斯教学反思
2014/02/06 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
质量整改报告范文
2014/11/08 职场文书
心得体会格式及范文
2016/01/25 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
详解redis在微服务领域的贡献
2021/10/16 Redis