使用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调用windows api锁定计算机示例
Apr 17 Python
python使用PyGame绘制图像并保存为图片文件的方法
Apr 24 Python
在Python的Django框架中创建语言文件
Jul 27 Python
举例讲解Python面向对象编程中类的继承
Jun 17 Python
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
Python算法之求n个节点不同二叉树个数
Oct 27 Python
python实现爬山算法的思路详解
Apr 09 Python
在python中,使用scatter绘制散点图的实例
Jul 03 Python
深入了解Python在HDA中的应用
Sep 05 Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 Python
基于pycharm实现批量修改变量名
Jun 02 Python
PyCharm Community安装与配置的详细教程
Nov 24 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
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
浅谈php冒泡排序
2014/12/30 PHP
php导入模块文件分享
2015/03/17 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
php源码的安装方法和实例
2019/09/26 PHP
Yii框架安装简明教程
2020/05/15 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
Python语言实现将图片转化为html页面
2017/12/06 Python
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
英国花园家具中心:Garden Furniture Centre
2017/08/24 全球购物
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
生产现场工艺工程师岗位职责
2013/11/28 职场文书
应用艺术毕业生的自我评价
2013/12/04 职场文书
会计学生自我鉴定
2014/02/06 职场文书
家长对老师的感言
2014/03/11 职场文书
园林系毕业生求职信
2014/06/23 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
高三化学教学反思
2016/02/22 职场文书