python操作mysql
Python DB-API
Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同 的方式操作各数据库。
使用流程:
1.引入API模块。
2.获取与数据库的连接。
3.执行SQL语句和存储过程。
4.关闭数据库连接。
python操作mysql的模块安装
Python2
安装MySQLdb模块,不支持pip安装,可以通过网站下载安装:https://pypi.org/project/MySQL-python/1.2.5/
安装依赖包:
yum install –y python-devel mysql-devel gcc
Python3
不支持MySQLdb了,可以安装pymysql模块,使用pip install pymysql进行安装即可。
MySQL的事务
一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
1、事务的原子性:一组事务,要么成功;要么撤回。
2、稳定性 : 有非法数据(外键约束之类),事务撤回。
3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候把事务保存到日志里Mysql的事务。
MariaDB [(none)]> show variables like "%auto%"; +-----------------------------+-------+ | Variable_name | Value | +-----------------------------+-------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | autocommit | ON | | automatic_sp_privileges | ON | | innodb_autoextend_increment | 8 | | innodb_autoinc_lock_mode | 1 | | innodb_stats_auto_update | 1 | | sql_auto_is_null | OFF | +-----------------------------+-------+
我们可以看到autocommit是开启状态,即我们在执行sql语句之后,mysql会为我们自动提交,如果想要手动提交,可以set autocommit = 0,这样只是临时生效,要永久生效的话,需要更改配置文件。
MySQL的常用操作
授权超级用户:grant all privileges on *.* to 'tangnanbing'@'%' identified by '1qa z@W SX' with grant option;
查看库:show databases;
查看都有哪些库 show databases;
查看某个库的表 use db; show tables \G ;
查看表的字段desc tb;
查看建表语句 show create table tb;
当前是哪个用户select user() ;
当前库 select database() ;
创建库 create database db1;
创建表 create table t1 (id int, name char(40 ) address varchar (30 ));
MySQL的连接
1.创建数据库 create database python; 2. 授权用户 grant all privileges on *.* to 'yangjian'@'%' identified by '123456' with grant option; flush privilege; 3. 建立连接 conn=MySQLdb.connect(host= "196.186.176.210",user= "yangjian",passwd="123456 ",db= "test")
比较常用的参数包括:
host:数据库主机名.默认 是用本地主机
user:数据库登陆名.默认是当前用户
passwd:数据库 登陆 的秘密.默认为空
db:要使用的数据库名.没有默认值
port:MySQL服务使用的TCP端口.默认是3306,数字类型
charset:数据库编码Mysql的连接
下面实际操作一下:
import pymysql # 建立连接 conn = pymysql.connect(host = "196.186.176.210", port = 3306, user = "yangjian", passwd = "123456", db = "test") # 创建游标 cursor = conn.cursor() # sql语句 sql = "select version()" # 执行sql语句 cursor.execute(sql) # 取回结果 result = cursor.fetchone() print("Database version: %s " % result) # 关闭游标 cursor.close() # 关闭连接 conn.close() 结果: Database version: 5.5.56-MariaDB
我们可以把上面的代码写成一个类
import pymysql class TestMysql(object): def __init__(self): self.dbConfig = { "host": "196.186.176.210", "port": 3306, "user": "yangjian", "passwd": "123456", "db": "test" } # 建立连接 conn = pymysql.connect(**self.dbConfig) self.a = conn def select(self): sql = "select * from memory limit 2" cursor = self.a.cursor() cursor.execute(sql) # fetchall 取回所有结果 fetchone取回一条结果 result = cursor.fetchall() print(result) def update(self): pass if __name__ == '__main__': # 实例化类 conn = TestMysql() # 调用类方法 conn.select() 结果: ((303, 1523236486), (303, 1523236487))