使用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多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
Python实现好友全头像的拼接实例(推荐)
Jun 24 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
Jun 11 Python
django2笔记之路由path语法的实现
Jul 17 Python
python加载自定义词典实例
Dec 06 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
python 实现IP子网计算
Feb 18 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
PHP 得到根目录的 __FILE__ 常量
2008/07/23 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
JavaScript Date对象应用实例分享
2017/10/30 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
Vue SSR 即时编译技术的实现
2020/05/06 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
Django卸载之后重新安装的方法
2017/03/15 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
编程输出如下图形
2013/11/24 面试题
医学类导师推荐信范文
2013/11/19 职场文书
2014信息公开实施方案
2014/02/22 职场文书
环保倡议书怎么写
2014/05/16 职场文书
房屋维修协议书范本
2014/09/25 职场文书
2014个人年度工作总结
2014/12/15 职场文书
六年级小学生评语
2014/12/26 职场文书