一、DB-API
1.1、Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。
1.2、Python DB-API的使用流程:
- 引入API模块
- 获取与数据库的连接
- 执行sql语句和存储过程
- 关闭数据库连接
1.3、Python操作mysql
Python3以后不支持MySQLdb了,用的是pymysql,这两个模块的功能是一模一样的,而2.x用的是MySQLdb模块
1.4、示例1:
import pymysql
class TestMysql(object):
def __init__(self): # 这个类的构造器的作用是定义连接,封装后每次调用的时候不用重新连接,提高系统的资源利用和代码执行效率
self.dbConfig = {
"host": "192.168.48.136",
"port": 3306,
"user": "xiang",
"passwd": "xiang",
"db": "test"
}
conn = pymysql.connect(**self.dbConfig)
self.a = conn
def select(self):
print("select")
def update(self):
print("update")
if __name__ == '__main__':
conn = TestMysql()
1.5、示例2:
import pymysql
class Check(object):
def __init__(self):
self.config = {
"host": "172.16.94.85",
"port": 3306,
"user": "sqlalchemy",
"passwd": "sqlalchemy",
"db": "sqlalchemy"
}
self.conn = pymysql.connect(**self.config) #创建连接
def select(self):
cur = self.conn.cursor() #创建游标
sql = "select * from student;"
cur.execute(sql) #执行sql
result = cur.fetchall()
return result
if __name__ == '__main__':
check = Check()
print(check.select())
二、Mysql的事物
2.1、一般来说,事物是必须满足四个条件(ACID):Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
- 事物的原子性:一组事物,要么成功,要么撤回
- 稳定性:有非法数据(外键约束之类),事物撤回
- 隔离性:事物独立运行,一个事物处理后的结果,影响了其他事物,那么其他事物会撤回,事物的100%隔离,需要牺牲速度
- 可靠性:软硬件奔溃后,InnoDB数据表驱动会利用日志文件重构修改,可靠性和高速度不可兼得,innodb flush log at trx commit选项,决定什么时候把事物保存到日志里
2.2、事务处理
在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
MYSQL 事务处理主要有两种方法:
①、用 BEGIN, ROLLBACK, COMMIT来实现
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
②、直接用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
查看Mysql 是否开启了事务(默认自动开启的)
mysql> show variables like 'auto%';
2.3、mysql常用操作:
- 创建用户以及授权:grant all on 库名.表名 to 'user1' identified by 'passwd';
- 查看授权情况:show grants;
- 查看表的行数:select count(*) from mysql.user;
- 查看表的内容:select * from mysql.db;
- 查询表相关:select db from mysql.db; select db,user from mysql.db; select * from mysql.db where host like '192.168.%';
- 插入表数据:insert into db1.t1 values (1, 'abc');
- 更新表数据:update db1.t1 set name='aaa' where id=1;
- 清空表内容:truncate table db1.t1;
- 删除表:drop table db1.t1;
- 删除库:drop database db1;