Python DB-API

一、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;