使用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的Tornado框架中的协程异步实现原理
Apr 23 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
python如何读写json数据
Mar 21 Python
python list元素为tuple时的排序方法
Apr 18 Python
Python实现接受任意个数参数的函数方法
Apr 21 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 Python
Python函数参数类型及排序原理总结
Dec 19 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
Dec 27 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
python 制作python包,封装成可用模块教程
Jul 13 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实现根据字符串生成对应数组的方法
2014/09/22 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
Django入门使用示例
2017/12/12 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
python+pandas分析nginx日志的实例
2018/04/28 Python
python 三元运算符使用解析
2019/09/16 Python
python模拟实现分发扑克牌
2020/04/22 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
保安岗位职责
2014/02/21 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
2014年四风问题个人对照自查剖析材料
2014/09/15 职场文书
委托书英文
2015/01/28 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis