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