1、Python 對數據庫的支持python
一、Python的 DB-API 爲大多數數據庫提供了接口。mysql
二、使用流程爲:①引入API模塊②獲取與數據庫的鏈接③執行SQL語句和存儲過程④關閉數據庫鏈接。sql
三、Python2 與 Python3 在於數據庫鏈接時使用的包不同。其中 Python2 使用的是MySQLdb;而Python3 使用的是pymysql。數據庫
四、Python 2 安裝MySQL是經過MySQLdb接口。編程
下載地址https://pypi.python.org/pypi/MySQL-python/1.2.5 分別對應Windows 和源碼安裝。網絡
五、Python 3 安裝MySQL數據庫pymsql包:(Python 3 客戶端)ide
5.1 輸入import pymysql 而後鼠標單擊pymysql 而後同時按Alt+enter 會自動進行安裝。函數
5.2 在 pycharm 軟件上點擊 Terminal 輸入命令 pip install pymysql 便可安裝此包。性能
二、fetch
2、mysql 的事物:
事務是必須知足4個條件(ACID): Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)。
①原子性:一組事務,要麼成功;要麼撤回。例如一次處理200個事物,有一個失敗,就會撤回該任務。
②穩定性 : 有非法數據(外鍵約束之類),事務撤回。
③隔離性:事務獨立運行。一個事務處理後的結果,影響了其餘事務,那麼其餘事務會撤回。
事務的100%隔離,須要犧牲速度
④可靠性:軟、硬件崩潰後,InnoDB數據表驅動會利用日誌文件重構修改。
可靠性和高速度不可兼得,innodb_flush_log_at_trx_commit選項決定何時把事務保存到日誌裏。
3、常見的MySQL操做命令
一、Linux命令下進入MySQL:
[root@JSH-01 ~]# mysql -uroot -p123456 輸入帳戶密碼鏈接本機
[root@JSH-01 ~]# mysql -uroot -p123456 -h127.0.0.1 -p3306 輸入帳戶密碼IP及端口鏈接遠程機器
二、受權用戶 & 受權超級用戶
grant all privileges on *.* to 'username'@'%' identified by ''password' ;
其中privileges - 用戶的操做權限 grant all privileges 授予全部權限
*.* 全部的庫全部的表 %表明通配全部IP地址 password 表明密碼
用以上命令受權的用戶不能給其它用戶受權,若是想讓該用戶能夠受權,增長 with grant option
即 grant all privileges on *.* to 'username'@'%' identified by ''password' with grant option;
三、進入MySQL後,經常使用的命令(注意使用 ; 由於分號是命令的結尾)
mysql> show databases; 查看庫
mysql> use ID; 切換庫(ID指的是庫名,例如 name student 等)
mysql> create database db1; 建立庫db1
mysql> show tables; 查看庫裏的表
mysql> show status; 查看MySQL狀態(通常主從同步的時候用的多)
mysql> create table student(列名1 數據類型,列名2 數據類型……); 建立student表,類型爲列名1…
mysql> select version(); 查看當前數據庫版本
mysql> select user(); 查看當前用戶
mysql> truncate table 清空表
mysql> drop table 刪除表
mysql> drop database 刪除數據庫
mysql> select * from ID; 查找庫名爲ID 中的 關鍵字*
四、mysql> show variables like '%auto%'; 自動提交(將事物結果自動提交)
五、更改密碼 UPDATE mysql.user SET password=PASSWORD("newpwd") WHERE user='username' ;
4、 經過Python 鏈接 MySQL
一、Python 3 安裝MySQL數據庫pymsql包。詳見如上介紹。
二、在MySQL上進行受權
grant all privileges on *.* to 'username'@'%' identified by ''password' with grant option;
三、在pycharm 中經過命令導入pymysql模塊鏈接 MySQL
import pymysql conn = pymysql.connect(host="192.168.6.137",port =3306,user="root",passwd="123456",db="test") #建立鏈接 print(conn)
也能夠直觀的定義(使用函數)
def connect_mysql(): db_config={ "host":"192.168.6.137", #定義host "port":3306, "user":"root", "passwd":"123456", "db":"python" "charset":"utf8" } con = pymysql.connect(db_config) retun con if __name__ == '__main__': con=connect_mysql()
經常使用的參數包括:host 數據庫主機 IP user 數據庫登陸名 passwd 數據庫登陸密碼
db 要使用的數據庫名 port 數據庫的TCP端口,默認是3306
charset 數據庫編碼,通常是utf8 (該編碼 通常不寫)
四、常見的錯誤信息
4.1 在鏈接mysql數據庫的時候,會報錯形成沒法鏈接成功數據庫。
例如:Can't connect to MySQL server on '192.168.6.137' (timed out)"
解決:(以 MySQL 安裝在 Cent OS 7 爲例)
首先肯定鏈接mysql時候的 帳戶和密碼 是否正確。
其次檢查輸入的 IP 是否正確。使用 ifconfig 查看。
再次確認MySQL宿主機的網絡與pycharm所在電腦的網絡是否連通。
而後查看MySQL的3306端口是否打開。必要時重啓MySQL服務:/etc/init.d/mysqld restart
再次關閉防火牆 firewall 即:
systemctl stop firewalld.service #中止運行firewalld服務
systemctl disable firewalld.service #關閉 firewalld服務
systemctl mask firewalld.service #屏蔽該服務,使其不能啓動
中止運行 iptables 防火牆,或 清空其規則 iptables -F
此時鏈接正常:
5、遊標
遊標是處理數據的一種方法,爲了查看或者處理結果集中的數據。
能夠把遊標看成一個指針,它能夠指定結果中的任何位置,而後容許用戶對指定位置的數據進行處理
一、建立遊標 cursor()
conn = pymysql.connect(host="192.168.6.137", port=3306, user='root', passwd='123456', db="test") cus = conn.cursor() #定義遊標
二、遊標的經常使用操做
# 取全部的結果,取結果以前,必定要先執行sql 即 cus.execute(sql) # cus.fetchall() # 取一個結果 # cus.fetchone() # 取10行數據 # cus.fetchmany(size=10) # 關閉遊標 # cus.close()
6、MySQL 鏈接池:PooledDB
在python編程中可使用pymysql進行數據庫的鏈接/查詢/插入/更新等操做,可是每次鏈接mysql數據庫請求時,都是獨立的去請求訪問,至關浪費資源,並且訪問數量達到必定數量時,對mysql的性能會產生較大的影響。所以,實際使用中,一般會使用數據庫的鏈接池技術,來訪問數據庫達到資源複用的目的。
數據庫鏈接池負責分配、管理和釋放數據庫鏈接。它容許應用程序重複使用一個現有的數據庫鏈接,而不是再從新創建一個。
示例:
import pymysql from DBUtils.PooledDB import PooledDB db_config = { "host":"192.168.6.137", "port":3306, "user":"root", "passwd":"123456", "db":"mysql", "charset":"utf8" } sql ="select * from mysql.proc limit 10; " pool = PooledDB(pymysql,5,**db_config) #5爲最小鏈接數 conn = pool.connection() cus = conn.cursor() #建立遊標 try: cus.execuute(sql) result = cus.fetchall() print(result) cus.close() conn.commit() except: conn.rollback() finally: conn.close()
7、建立表格
一、設計表結構
二、經過以下代碼在MySQL 的 stg庫中建立 Course、Score、Student、Teacher、tmp1表。
import pymysql def connectMysql(): db_config = { "host":"192.168.6.137", "port":3306, "user":"root", "passwd":"123456", "db":"stg" } conn = pymysql.connect(**db_config) return conn student = ''' create table Student( stdid INT PRIMARY KEY, stdname varchar(100), gender enum('F','M'), age INT ) ''' course = ''' create table Course( couid int not null, cname varchar(50) not null, tid int not null ) ''' score = ''' create table Score( sid int not null, stdid int not null, couid int not null, grade int not null ) ''' teacher = ''' create table Teacher( tid int not null, tname varchar(50) not null ) ''' tmp1 = '''set @i := 0;''' tmp = '''create table tmp1 as select (@i :=@i +1) as id from information_schema.tables limit 10;''' if __name__ == '__main__': conn = connectMysql() cur = conn.cursor() try: cur.execute(student) cur.execute(course) cur.execute(score) cur.execute(teacher) cur.execute(tmp1) cur.execute(tmp) cur.close() conn.commit() except: conn.rollback() print("error") raise finally: conn.close()
結果以下:
8、增長數據
9、查詢和刪除數據
10、改數據和索引