使用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 相关文章推荐
详解Django框架中用户的登录和退出的实现
Jul 23 Python
Python分治法定义与应用实例详解
Jul 28 Python
浅谈Python处理PDF的方法
Nov 10 Python
python计算日期之间的放假日期
Jun 05 Python
Python DataFrame 设置输出不显示index(索引)值的方法
Jun 07 Python
Python简单基础小程序的实例代码
Apr 28 Python
python腾讯语音合成实现过程解析
Aug 01 Python
Python如何使用BeautifulSoup爬取网页信息
Nov 26 Python
关于Python中定制类的比较运算实例
Dec 19 Python
Python web如何在IIS发布应用过程解析
May 27 Python
Python JSON常用编解码方法代码实例
Sep 05 Python
Python下使用Trackbar实现绘图板
Oct 27 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
全国FM电台频率大全 - 1 北京市
2020/03/11 无线电
PHP开发的一些注意点总结
2010/10/12 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
php遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
网页javascript精华代码集
2007/01/24 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
JavaScript运算符小结
2015/06/03 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
在Python中使用HTML模版的教程
2015/04/29 Python
Python实现图像几何变换
2015/07/06 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
小小的船教学反思
2014/02/21 职场文书
中学生操行评语大全
2014/04/24 职场文书
班级年度安全计划书
2014/05/01 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
python glom模块的使用简介
2021/04/13 Python
详解分布式系统中如何用python实现Paxos
2021/05/18 Python
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers