开发者社区> 科技小能手> 正文

26. Python 对 mysql 的操作

简介:
+关注继续查看

mysql数据库现在已经成为市场占有率最高的数据库,在开发过程中,很多情况下我们都需要操作mysql,所以对于python操作mysql的了解是必不可少的。

Python标准数据库接口为Python DB-API, Python DB-API为开发人员提供了数据库应用 编程接口。

参考地址:https://wiki.python.org/moin/DatabaseInterfaces,你可以查看python支持数据库的详细列表。

不同的数据库需要下载不同的DB API模块。

DB-API是一个规范。它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口。

Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同 的方式操作各数据库。

Python DB-API使用流程:

1.引入API模块。

2.获取与数据库的连接。

3.执行SQL语句和存储过程。

4.关闭数据库连接。


1. 安装所需要的包

MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。

如果是windows系统:登录 https://pypi.python.org/pypi/MySQL-python/1.2.5 找到.exe结尾的包;

下载安装就好了,然后在cmd中执行:

64ae193ccae5be8f8d75eb9631a50c73.png

如果结果如上图所示,就说明你安装成功了,如果有如下报错信息,

>>> import MySQLdb

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

ImportError: No module named MySQLdb

那是环境变量有问题,把安装刚才下载的.exe包的路径添加到环境变量中就可以了。


如果是linux系统,可以下载源码包进行安装:

链接中的zip包,然后安装:

# yum install –y python-devel

# yum install –y mysql-devel

# yum install –y gcc

解压:

# unzip MySQL-python-1.2.5.zip

# cd MySQL-python-1.2.5

# python setup.py build

# python setup.py install

# python

>>> import MySQLdb




2.数据库的连接

MySQLdb提供了connect方法用来和数据库建立连接,接收数个参数,返回连接对象:

平常我们在Mysql的数据库中手动建立python库的方法:

> create database python;


通过以下代码进行python库的连接:

conn=MySQLdb.connect(host="192.168.48.128",user="test",passwd="123456",db="python",port=3306,charset="utf8")

包含了几种参数:

host:数据库主机名.默认是用本地主机

user:数据库登陆名.默认是当前用户

passwd:数据库登陆的秘密.默认为空

db:要使用的数据库名.没有默认值

port:MySQL服务使用的TCP端口.默认是3306,数字类型

charset:数据库编码字符集

更多参数的信息可以查这里 http://mysql-python.sourceforge.net/MySQLdb.html

有时候,为了代码规范,推荐把所有数据库的配置写在一个字典中,如下所示:

1
2
3
4
5
6
7
8
9
10
11
def connect_mysql():
    db_config = {
        'host''192.168.48.128',
        'port'3306,
        'user''xiang',
        'passwd''123456',
        'db''python',
        'charset''utf8'
    }
    cnx = MySQLdb.connect(**db_config)
    return cnx

这样写的代码更规范,即使以后数据库有协议,只需要改动 db_config 字典中的内容就可以了,后面的内容就不用改了,增加代码的可移植性;

也可以把 mysql 的连接包装成一个函数,以后在连接 mysql 的时候,直接调用函数就可以了!


3.Mysql事务

了解什么是mysql的事物

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如,你操作一个数据库,公司的一个员工离职了,你要在数据库中删除他的资料,也要删除该人员相关的,比如邮箱,个人资产等。这些数据库操作语言就构成了一个事务。在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务,所以很多情况下我们都使用innodb引擎。事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。

一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

1、事务的原子性:一组事务,要么成功;要么撤回。

2、稳定性 : 有非法数据(外键约束之类),事务撤回。

3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。

4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。


mysql在默认的情况下,是把每个select,insert,update,delete等做为一个事务的,登录mysql服务器,进入mysql,执行以下命令:

mysql> show variables like 'auto%';

1
2
3
4
5
6
7
8
9
+----------------------------------+--------+
| Variable_name                    | Value  |
+----------------------------------+--------+
| auto_increment_increment         | 1      |
| auto_increment_offset            | 1      |
| autocommit                       | ON     |
| automatic_sp_privileges          | ON     |
+----------------------------------+--------+
rows in set (0.00 sec)


如上所示:

有一个参数 autocommit 就是自动提交的意思,每执行一个msyql的 select,insert,update 等操作,就会进行自动提交。

如果把改选项关闭,我们就可以每次执行完一次代码就需要进行手动提交,connect 对象给我们提供了两种办法来操作提交数据。



4. mysql事务的方法

commit():提交当前事务,如果是支持事务的数据库执行增删改后没有commit则数据库默认回滚,白操作了

rollback():取消当前事务

下面我们来看个例子:

创建一个员工表:

> create table employees (

emp_no int not null auto_increment,

emp_name varchar(16) not null,

gender enum('M', 'F') not null,

hire_date date not null,

primary key (emp_no)

);


emp_no:         员工id,为主键且唯一

emp_name:    员工的名字

fender:         性别,只有M和F两种选择

hire_date:    雇佣的时间。


插入几条数据:

> insert into employees(emp_no, emp_name, gender, hire_date) values(1001, 'li', 'M', '2015-04-01');

> insert into employees(emp_no, emp_name, gender, hire_date) values(1002, 'xian', 'M', '2015-04-01');

> insert into employees(emp_no, emp_name, gender, hire_date) values(1003, 'sheng', 'M', '2015-04-01');

> select * from employees;

1
2
3
4
5
6
7
+-----------+----------------+----------+----------------+
| emp_no    | emp_name       | gender   | hire_date      |
+-----------+----------------+----------+----------------+
|   1001    | li             | M        | 2015-04-01     |
|   1002    | xian           | M        | 2015-04-01     |
|   1003    | sheng          | M        | 2015-04-01     |
+-----------+----------------+----------+----------------+


通过python代码增加一条数据到数据库中,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import MySQLdb
def connect_mysql():
    db_config = {
        'host''192.168.48.128',
        'port'3306,
        'user''xiang',
        'passwd''123456',
        'db''python',
        'charset''utf8'
    }
    cnx = MySQLdb.connect(**db_config)
    return cnx
     
if __name__ == '__main__':
    cnx = connect_mysql()
    cus = cnx.cursor()
    sql  = ''' create table test(id int not null);insert into test(id) values (100);'''
    try:
        cus.execute(sql)
        cus.close()
        cnx.commit()
    except Exception as e:
        cnx.rollback()
        print('Error')
        # raise e
    finally:
        cnx.close()

结果返回:

Error

查看数据库中的数据:select * from employees;

并没有发生变化

解释:

在我们插入数据雇佣时间字段 hire_date 的时候,故意把时间写错,导致异常发生,捕获到异常之后,打印 Error,最后关闭mysql连接。

cus = cnx.cursor() 的作用是创建一个游标对象。



本文转自 听丶飞鸟说 51CTO博客,原文链接:http://blog.51cto.com/286577399/1983631

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
19256 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
14267 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
18568 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
16881 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
18414 0
23705
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载
OceanBase 入门到实战教程
立即下载