使用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中管理Users和Permissions以及Groups的方法
Jul 23 Python
python实现稀疏矩阵示例代码
Jun 09 Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 Python
python实现n个数中选出m个数的方法
Nov 13 Python
Django管理员账号和密码忘记的完美解决方法
Dec 06 Python
python调用opencv实现猫脸检测功能
Jan 15 Python
Python @property及getter setter原理详解
Mar 31 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 Python
最简单的matplotlib安装教程(小白)
Jul 28 Python
Django日志及中间件模块应用案例
Sep 10 Python
详解Python 3.10 中的新功能和变化
Apr 28 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
层叠菜单的动态生成
2006/10/09 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
php组合排序简单实现方法
2016/10/15 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
2020/11/17 Python
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
自主招生自荐信指南
2014/02/04 职场文书
党委工作总结2015
2015/04/27 职场文书
2015年工商所工作总结
2015/05/21 职场文书