最近开始玩Python,慢慢开始喜欢上它了,以前都是用shell来实现一些自动化或者监控的操作,现在用Python来实现,感觉更棒,Python是一门很强大的面向对象语言,所以作为一个运维DBA或者运维来说,都应该学会用Python来提高工作效率。下面简单的介绍一下Python DB API MySQLdb

使用Python DB API访问数据库的流程图:

在Centos下安装MySQLdb模板(为了方便演显,我用yum安装,也是最快最省事的安装):

yum install MySQL-python -y

如果安装有ipython,可以看到它有非常多的对象,每个对象这里就介绍ipython的安装:

In [1]: import MySQLdb
In []: MySQLdb.
MySQLdb.BINARY MySQLdb.NotSupportedError MySQLdb.escape_sequence
MySQLdb.Binary MySQLdb.OperationalError MySQLdb.escape_string
MySQLdb.Connect MySQLdb.ProgrammingError MySQLdb.get_client_info
MySQLdb.Connection MySQLdb.ROWID MySQLdb.paramstyle
MySQLdb.DATE MySQLdb.STRING MySQLdb.release
MySQLdb.DATETIME MySQLdb.TIME MySQLdb.result
MySQLdb.DBAPISet MySQLdb.TIMESTAMP MySQLdb.server_end
MySQLdb.DataError MySQLdb.Time MySQLdb.server_init
MySQLdb.DatabaseError MySQLdb.TimeFromTicks MySQLdb.string_literal
MySQLdb.Date MySQLdb.Timestamp MySQLdb.test_DBAPISet_set_equality
MySQLdb.DateFromTicks MySQLdb.TimestampFromTicks MySQLdb.test_DBAPISet_set_equality_membership
MySQLdb.Error MySQLdb.Warning MySQLdb.test_DBAPISet_set_inequality
MySQLdb.FIELD_TYPE MySQLdb.apilevel MySQLdb.test_DBAPISet_set_inequality_membership
MySQLdb.IntegrityError MySQLdb.connect MySQLdb.thread_safe
MySQLdb.InterfaceError MySQLdb.connection MySQLdb.threadsafety
MySQLdb.InternalError MySQLdb.constants MySQLdb.times
MySQLdb.MySQLError MySQLdb.debug MySQLdb.version_info
MySQLdb.NULL MySQLdb.escape
MySQLdb.NUMBER MySQLdb.escape_dict

我们这里主要说创建数据库的连接对象connection,创建方法MySQLdb.connect(参数)

主要参数如下:

  参数名    类型      说明
host 字符串 MySQL服务器地址
port 数字 MySQL服务器端口号
user 字符串 用户名
passwd 字符串 密码
db 字符串 数据库名称
charset 字符串 连接编码

 connection对象支持的方法:

方法名        说明
cursor() 使用该连接创建并返回游标
commit() 提交当前事务
rollback() 回滚当前事务
close() 关闭连接

实例讲解:编辑connection.py

#!/usr/bin/env python
#coding:utf-8
#name: connection.py import MySQLdb #创建连接
conn = MySQLdb.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
passwd = '',
db = 'python',
charset = 'utf8'
)
#创建一个学游标对象
cursor = conn.cursor()
print conn
print cursor #关闭游标 关闭连接
cursor.close()
conn.close()

执行结果:

[root@Test-server script]#python connection.py
<_mysql.connection open to '127.0.0.1' at 23c1fa0>
<MySQLdb.cursors.Cursor object at 0x7f545cbf97d0>
[root@Backup-server script]#vim connection.py

可以看到成功连接了MySQL.

下面介绍一下游标对象: 用于执行查询和获取结果

cursor对象支持的方法:

参数名               说明
execute(op[,args]) 执行一个数据查询命令
fetchone() 取的结果集的下一行
fetchmany(size) 获取结果集的下几行
fetchall() 获取结果集中剩下的所有行
rowcount 最近一次execute返回的行数或影响行数
close() 关闭游标对象

execute方法:执行SQL、将结果从数据为获取到客户端:

fetch*()方法:移动rownumber,返回数据。

实例演示:(select查询数据)

创建一张测试:

CREATE TABLE `user` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
mysql> select * from user;
+--------+----------+
| userid | username |
+--------+----------+
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
| 4 | user4 |
| 5 | user5 |
| 6 | user6 |
| 7 | user7 |
| 8 | user8 |
| 9 | user9 |
+--------+----------+
9 rows in set (0.00 sec)

编辑cursor.py文件:

#!/usr/bin/env python
#coding:utf-8
#name: cursor.py
import MySQLdb conn = MySQLdb.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
passwd = '',
db = 'python',
charset = 'utf8'
) cursor = conn.cursor()
sql = "select * from user"
cursor.execute(sql) #打印所有行数据
print cursor.rowcount #打印第一行数据
rs = cursor.fetchone()
print "返回一条数据",rs #打印从第二行起的三行数据
rs = cursor.fetchmany(3)
print "返回从第二条起的三条数据",rs #打印剩下的所有行数
rs = cursor.fetchall()
print "返回剩下的行数据",rs cursor.close()
conn.close()

运行程序:

[root@Test-server script]#python connection.py 

返回一条数据 (1L, u'user1')
返回从第二条起的三条数据 ((2L, u'user2'), (3L, u'user3'), (4L, u'user4'))
返回剩下的行数据 ((5L, u'user5'), (6L, u'user6'), (7L, u'user7'), (8L, u'user8'), (9L, u'user9'))

我们看到,每次使用fetch方法,都是在上一次fetch方法执行的结果的尾部开始。

如果我们想把表里的数据格式化打印出来,因为从上面的结果我们可以看到返回的是元组的元组,我们通过for方法把它取出:

#!/usr/bin/env python
#coding:utf-8
#name: cursor.py
import MySQLdb conn = MySQLdb.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
passwd = '',
db = 'python',
charset = 'utf8'
) cursor = conn.cursor()
sql = "select * from user"
cursor.execute(sql)
#获取所有行的数据
rs = cursor.fetchall()
for row in rs:
print "userid=%s, username=%s" % row cursor.close()
conn.close()

执行程序:

[root@Test-server script]#python cursor.py
userid=, username=user1
userid=, username=user2
userid=, username=user3
userid=, username=user4
userid=, username=user5
userid=, username=user6
userid=, username=user7
userid=, username=user8
userid=, username=user9

对MySQL的insert/delete/update的操作演示:

编辑一个增删改的脚本iud.py

#!/usr/bin/env python
#coding:utf-8
#name: iud.py
import MySQLdb conn = MySQLdb.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
passwd = '',
db = 'python',
charset = 'utf8'
) cursor = conn.cursor()
#插入sql
sql_insert = "insert into user (userid,username) values (10,'user10')"
#更新sql
sql_update = "update user set username= 'name91' where userid=9"
#删除sql
sql_delete = "delete from user where userid < 3" #把一个事务放到一个try块里,如果出现异常就回滚 try:
cursor.execute(sql_insert)
print cursor.rowcount cursor.execute(sql_update)
print cursor.rowcount cursor.execute(sql_delete)
print cursor.rowcount #提交事务
conn.commit() #格式化增删改后的数据查出来
select_sql = "select * from user"
cursor.execute(select_sql)
rs = cursor.fetchall()
for row in rs:
print "userid=%s, username=%s" % row except Exception as e:
conn.rollback() #若有异常就回滚

执行程序,结果如下:

root@Test-server script]#python iud.py 

userid=, username=user3
userid=, username=user4
userid=, username=user5
userid=, username=user6
userid=, username=user7
userid=, username=user8
userid=, username=name91
userid=, username=user10

通过上面的简单例子说明了通过Python的MySQLdb模块去进行MySQL数据库操作,网上有很多例子,我是Python菜鸟,通过参加慕课网的一些简单直接的python课程学习,个人感觉还不错,至少我学会了使用Python去操作MySQL。

参考资料:

https://www.python.org/dev/peps/pep-0249/

http://www.imooc.com

作者:陆炫志

出处:xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111

您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。

Python进行MySQL数据库操作的更多相关文章

  1. python对mysql数据库操作的三种不同方式

    首先要说一下,在这个暑期如果没有什么特殊情况,我打算用python尝试写一个考试系统,希望能在下学期的python课程实际使用,并且尽量在此之前把用到的相关技术都以分篇博客的方式分享出来,有想要交流的 ...

  2. python之(mysql数据库操作)

    前言:关心3步骤(此文章只针对python自动化根基展开描述) 什么是mysql数据库操作?  答:利用python对mysql数据库进行增, 删, 改, 查 操作 为什么要用python对mysql ...

  3. 使用Python对MySQL数据库操作

    本文介绍Python3使用PyMySQL连接数据库,并实现简单的增删改查. 什么是PyMySQL? PyMySQL是Python3.x版本中用于连接MySQL服务器的一个库,Python2.x中则使用 ...

  4. python的mysql数据库操作

    python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库 ...

  5. python接口测试—mysql数据库操作

    python操作mysql数据库 1.安装pymysql库 在python中安装pymysql第三方库,通过pip install pymysql 命令进行安装. 2.python操作mysql数据库 ...

  6. Python连接MySQL数据库操作

    一.创建数据库及表 CREATE DATABASE testdb; USE testdb; CREATE TABLE `tb_user` ( `id` INT (11) NOT NULL AUTO_I ...

  7. python 连接mysql数据库操作

    import pymysql.cursors # 连接数据库 connect = pymysql.Connect( host='localhost', port=3306, user='root', ...

  8. Python 3 MySQL数据库操作

    import pymysql class Mysql_db(): def __init__(self,ip,username,password,db_name,table_name): self.ip ...

  9. Python数据存储 — MySQL数据库操作

    本地安装MySQL 调试环境python3.6,调试python操作mysql数据库,首先要在本地或服务器安装mysql数据库. 安装参考:https://mp.csdn.net/postedit/8 ...

随机推荐

  1. es6小记

    let, const, class, extends, super, arrow functions, template string, destructuring, default, rest ar ...

  2. 网络地址转换-NAT

    网络地址转换-NAT 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.NAT组网和常用术语 私网:局域网内IP 公网:因特网的公网ip地址 NAT设备:就是讲私网地址转换为公网的 ...

  3. 有关Java内存溢出及内存消耗的小知识

    内存溢出原理: 我们知道,Java程序本身是不能直接在计算机上运行的,它需要依赖于硬件基础之上的操作系统和JVM(Java虚拟机). Java程序启动时JVM都会分配一个初始内存和最大内存给这个应用程 ...

  4. 线程异步操作,更新其中一个报错不影响另一个的运行(Task )

    //子系统同步更新                BD001_BLL bll = new BD001_BLL();                List<BD001_Model> lis ...

  5. resolution will not be reattempted until the update interval of repository-group has elapsed or updates are forced

    Failed to execute goal on project safetan-web: Could not resolve dependencies for project com.safeta ...

  6. js_原生js实现上拉加载更多的功能。

    1.人生啊,是我莽撞了啊.这是我公司一个喜欢读书的女孩子的个性签名,喜欢哪些句子,不悲伤,却切切实实的令人喜好. 2.写程序是一件很直接明了的事情,明白了就是明白了,不懂就是不懂,不懂装懂的会让你走很 ...

  7. 【金色】种瓜得瓜,种豆得豆 Gym - 102072H (线段树)

    题目链接:https://cn.vjudge.net/problem/Gym-102072H 题目大意:中文题目 具体思路:通过两棵线段树来维护,第一棵线段树来维护当前坐标的点的日增长速度(默认每一年 ...

  8. 列式数据库~clickhouse 底层存储原理

    简介:今天介绍列式数据库的一些基本原理 一  数据目录 Data目录 数据存储目录,数据按照part分成多个文件夹,每个文件夹下存储相应数据和对应的元信息文件 Metadata 表定义语句,存储所有表 ...

  9. linux bash的重定向

    cnblogs原创 下面几种bash重定向各表示什么意思? find / -name passwd > /dev/null >& > /dev/null find / -na ...

  10. 【逆向工具】使用x64dbg+spy去除WinRAR5.40(64位)广告弹框

    1 学习目标 WinRAR5.40(64位)的弹框广告去除,由于我的系统为x64版本,所以安装了WinRAR(x64)版本. OD无法调试64位的程序,可以让我熟悉x64dbg进行调试的界面. 其次是 ...