介紹
PyMySQL 是在 Python3.x 版本中用於連接 MySQL 服務器的一個庫,Python2中則使用mysqldb。
PyMySQL 遵循 Python 數據庫 API v2.0 規范,並包含了 pure-Python MySQL 客戶端庫。
安裝
pip install pymysql
本地數據庫操作
mysql> create database mydb1;
#Query OK, 1 row affected
mysql> use mydb1;
#Database changed
mysql> create table users(
-> id int not null auto_increment primary key,
-> name char(8) not null,
-> age tinyint unsigned not null,
-> sex char(4) not null,
-> tel char(13) null default "-"
-> );
#Query OK, 0 rows affected
mysql> commit;
#Query OK, 0 rows affected
基本操作
import pymysql
# 連接mysql
conn = pymysql.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb1')
# 獲取游標
cur = conn.cursor()
try:
# 使用execute執行sql語句
reCount = cur.execute('select * from users;')
# reCount = cur.execute('insert into users(name,age,sex) values(%s,%s,%s)', ('momo', '13','male'))
# reCount = cur.execute('insert into users(name,age,sex) values(%(age)s, %(name)s, %(sex)s)',{'sex':'female,'name':'pig','age':10})
# 使用fetchone 獲取一條數據
data = cur.fetchone()
# 使用fetchall 獲取所有數據
#data = cur.fetchall()
# 提交命令
conn.commit()
except:
# 發生錯誤回滾
conn.rollback()
# 關閉游標
cur.close()
# 關閉數據庫連接
conn.close()
print(reCount)
print(data)
創建數據庫表
1 #!/usr/bin/python3 2 3 import pymysql 4 5 # 打開數據庫連接 6 db = pymysql.connect("localhost","testuser","test123","TESTDB" ) 7 8 # 使用 cursor() 方法創建一個游標對象 cursor 9 cursor = db.cursor() 10 11 # 使用 execute() 方法執行 SQL,如果表存在則刪除 12 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") 13 14 # 使用預處理語句創建表 15 sql = """CREATE TABLE EMPLOYEE ( 16 FIRST_NAME CHAR(20) NOT NULL, 17 LAST_NAME CHAR(20), 18 AGE INT, 19 SEX CHAR(1), 20 INCOME FLOAT )""" 21 22 cursor.execute(sql) 23 24 # 關閉數據庫連接 25 db.close()
數據庫插入數據
1 #!/usr/bin/python3 2 3 import pymysql 4 5 # 打開數據庫連接 6 db = pymysql.connect("localhost","testuser","test123","TESTDB" ) 7 8 # 使用cursor()方法獲取操作游標 9 cursor = db.cursor() 10 11 # SQL 插入語句 12 sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \ 13 LAST_NAME, AGE, SEX, INCOME) \ 14 VALUES ('%s', '%s', '%d', '%c', '%d' )" % \ 15 ('Mac', 'Mohan', 20, 'M', 2000) 16 try: 17 # 執行sql語句 18 cursor.execute(sql) 19 # 執行sql語句 20 db.commit() 21 except: 22 # 發生錯誤時回滾 23 db.rollback() 24 25 # 關閉數據庫連接 26 db.close()
查詢
1 #!/usr/bin/python3 2 3 import pymysql 4 5 # 打開數據庫連接 6 db = pymysql.connect("localhost","testuser","test123","TESTDB" ) 7 8 # 使用cursor()方法獲取操作游標 9 cursor = db.cursor() 10 11 # SQL 查詢語句 12 sql = "SELECT * FROM EMPLOYEE \ 13 WHERE INCOME > '%d'" % (1000) 14 try: 15 # 執行SQL語句 16 cursor.execute(sql) 17 # 獲取所有記錄列表 18 results = cursor.fetchall() 19 for row in results: 20 fname = row[0] 21 lname = row[1] 22 age = row[2] 23 sex = row[3] 24 income = row[4] 25 # 打印結果 26 print ("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \ 27 (fname, lname, age, sex, income )) 28 except: 29 print ("Error: unable to fecth data") 30 31 # 關閉數據庫連接 32 db.close()
更新
1 #!/usr/bin/python3 2 3 import pymysql 4 5 # 打開數據庫連接 6 db = pymysql.connect("localhost","testuser","test123","TESTDB" ) 7 8 # 使用cursor()方法獲取操作游標 9 cursor = db.cursor() 10 11 # SQL 更新語句 12 sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 13 WHERE SEX = '%c'" % ('M') 14 try: 15 # 執行SQL語句 16 cursor.execute(sql) 17 # 提交到數據庫執行 18 db.commit() 19 except: 20 # 發生錯誤時回滾 21 db.rollback() 22 23 # 關閉數據庫連接 24 db.close()
刪除
1 #!/usr/bin/python3 2 3 import pymysql 4 5 # 打開數據庫連接 6 db = pymysql.connect("localhost","testuser","test123","TESTDB" ) 7 8 # 使用cursor()方法獲取操作游標 9 cursor = db.cursor() 10 11 # SQL 刪除語句 12 sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20) 13 try: 14 # 執行SQL語句 15 cursor.execute(sql) 16 # 提交修改 17 db.commit() 18 except: 19 # 發生錯誤時回滾 20 db.rollback() 21 22 # 關閉連接 23 db.close()
事務
1 # SQL刪除記錄語句 2 sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20) 3 try: 4 # 執行SQL語句 5 cursor.execute(sql) 6 # 向數據庫提交 7 db.commit() 8 except: 9 # 發生錯誤時回滾 10 db.rollback()
| 異常 | 描述 |
|---|---|
| Warning | 當有嚴重警告時觸發,例如插入數據是被截斷等等。必須是 StandardError 的子類。 |
| Error | 警告以外所有其他錯誤類。必須是 StandardError 的子類。 |
| InterfaceError | 當有數據庫接口模塊本身的錯誤(而不是數據庫的錯誤)發生時觸發。 必須是Error的子類。 |
| DatabaseError | 和數據庫有關的錯誤發生時觸發。 必須是Error的子類。 |
| DataError | 當有數據處理時的錯誤發生時觸發,例如:除零錯誤,數據超范圍等等。 必須是DatabaseError的子類。 |
| OperationalError | 指非用戶控制的,而是操作數據庫時發生的錯誤。例如:連接意外斷開、 數據庫名未找到、事務處理失敗、內存分配錯誤等等操作數據庫是發生的錯誤。 必須是DatabaseError的子類。 |
| IntegrityError | 完整性相關的錯誤,例如外鍵檢查失敗等。必須是DatabaseError子類。 |
| InternalError | 數據庫的內部錯誤,例如游標(cursor)失效了、事務同步失敗等等。 必須是DatabaseError子類。 |
| ProgrammingError | 程序錯誤,例如數據表(table)沒找到或已存在、SQL語句語法錯誤、 參數數量錯誤等等。必須是DatabaseError的子類。 |
| NotSupportedError | 不支持錯誤,指使用了數據庫不支持的函數或API等。例如在連接對象上 使用.rollback()函數,然而數據庫並不支持事務或者事務已關閉。 必須是DatabaseError的子類。 |
