18.python關於mysql的api
一.pymysql模組
1.pymysql是Python中操作MySQL的模組
2.執行sql語句
(1)連線資料庫:
import pymysql #連線mysql資料庫建立conn物件(host連線的機器,user連線的使用者,password連線的密=密碼,db連線的資料庫 ) conn = pymysql.connect(host='192.168.1.232', port=3306, user='root', passwd='123456', db='xixi') #建立遊標,預設是元組,可以改為字典:conn.cursor(cursor=pymysql.cursors.DictCursor)cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
(2)建立表:
import pymysql #連線mysql資料庫建立conn物件(host連線的機器,user連線的使用者,password連線的密=密碼,db連線的資料庫 ) conn = pymysql.connect(host='192.168.1.232', port=3306, user='root', passwd='123456', db='xixi') #建立遊標,預設是元組,可以改為字典:conn.cursor(cursor=pymysql.cursors.DictCursor)cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #生成sql建立xixi表的語句 sql = "CREATE TABLE xixi (id INT ,name VARCHAR (20))" #通過遊標執行SQL命令語句 cursor.execute(sql)
檢視結果:
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
(3)插入資料:
import pymysql #連線mysql資料庫建立conn物件(host連線的機器,user連線的使用者,password連線的密=密碼,db連線的資料庫 ) conn = pymysql.connect(host='192.168.1.232', port=3306, user='root', passwd='123456', db='xixi') #建立遊標,預設是元組,可以改為字典:conn.cursor(cursor=pymysql.cursors.DictCursor) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #插入四條資料 cursor.execute("INSERT INTO xixi VALUES(1,'dongdong'),(2,'nannan'),(3,'xixi'),(4,'beibei')") #進行提交(在對資料庫中的內容進行修改時,需要進行提交內容方可進行儲存) conn.commit()
檢視結果:
+------+----------+
| id | name |
+------+----------+
| 1 | dongdong |
| 2 | nannan |
| 3 | xixi |
| 4 | beibei |
+------+----------+
(4)查表資料
方式一:查詢遊標起始的第一條結果
import pymysql #連線mysql資料庫建立conn物件(host連線的機器,user連線的使用者,password連線的密=密碼,db連線的資料庫 ) conn = pymysql.connect(host='192.168.1.232', port=3306, user='root', passwd='123456', db='xixi') #建立遊標,預設是元組,可以改為字典:conn.cursor(cursor=pymysql.cursors.DictCursor) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #查資料 RET=cursor.execute("select * from xixi") one=cursor.fetchone() print(one)
查詢結果:
{'id': 1, 'name': 'dongdong'}
方式二:查詢遊標起始的倆條資料
import pymysql #連線mysql資料庫建立conn物件(host連線的機器,user連線的使用者,password連線的密=密碼,db連線的資料庫 ) conn = pymysql.connect(host='192.168.1.232', port=3306, user='root', passwd='123456', db='xixi') #建立遊標,預設是元組,可以改為字典:conn.cursor(cursor=pymysql.cursors.DictCursor) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #查資料 many=cursor.fetchmany(2) print(many)
查詢結果:
[{'id': 1, 'name': 'dongdong'}, {'id': 2, 'name': 'nannan'}]
方式三:查詢遊標起始的所有資料
import pymysql #連線mysql資料庫建立conn物件(host連線的機器,user連線的使用者,password連線的密=密碼,db連線的資料庫 ) conn = pymysql.connect(host='192.168.1.232', port=3306, user='root', passwd='123456', db='xixi') #建立遊標,預設是元組,可以改為字典:conn.cursor(cursor=pymysql.cursors.DictCursor) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #查資料 all=cursor.fetchall() print(all)
查詢結果:
[{'id': 1, 'name': 'dongdong'}, {'id': 2, 'name': 'nannan'}, {'id': 3, 'name': 'xixi'}, {'id': 4, 'name': 'beibei'}]
(5)scroll移動當前的遊標
方式一:相對當前位置向上下移動(負數是向上,正數是向下)
import pymysql #連線mysql資料庫建立conn物件(host連線的機器,user連線的使用者,password連線的密=密碼,db連線的資料庫 ) conn = pymysql.connect(host='192.168.1.232', port=3306, user='root', passwd='123456', db='xixi') #建立遊標,預設是元組,可以改為字典:conn.cursor(cursor=pymysql.cursors.DictCursor) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #查資料 RET=cursor.execute("select * from xixi") one=cursor.fetchone() #第一次查詢 print(one) #scroll移動當前的遊標 cursor.scroll(1,mode='relative') #遊標向下移動1位 one=cursor.fetchone() #第二次查詢 print(one)
查詢結果:
{'id': 1, 'name': 'dongdong'}
{'id': 3, 'name': 'xixi'}
方式二:把遊標位置移動到相對的位置
import pymysql #連線mysql資料庫建立conn物件(host連線的機器,user連線的使用者,password連線的密=密碼,db連線的資料庫 ) conn = pymysql.connect(host='192.168.1.232', port=3306, user='root', passwd='123456', db='xixi') #建立遊標,預設是元組,可以改為字典:conn.cursor(cursor=pymysql.cursors.DictCursor) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #查資料 RET=cursor.execute("select * from xixi") one=cursor.fetchone() #第一次查詢 print(one) cursor.scroll(3,mode='absolute') #把遊標位置移動到3的位置 one=cursor.fetchone() #第二次查詢 print(one)
查詢結果:
{'id': 1, 'name': 'dongdong'}
{'id': 4, 'name': 'beibei'}
二.python中呼叫資料庫啟動事務
當前account表
+------+--------+---------+
| id | name | balance |
+------+--------+---------+
| 1 | xixi | 10000 |
| 2 | beibei | 10000 |
+------+--------+---------+
python程式碼:
import pymysql #連線mysql資料庫建立conn物件(host連線的機器,user連線的使用者,password連線的密=密碼,db連線的資料庫 ) conn = pymysql.connect(host='192.168.1.232', port=3306, user='root', passwd='123456', db='xixi') #建立遊標,預設是元組,可以改為字典:conn.cursor(cursor=pymysql.cursors.DictCursor) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) try: insertSQL0="INSERT INTO account(id,name,balance) VALUES (3,'yeye',4000)" #給賬戶插入一條資訊 insertSQL1="UPDATE account set balance=balance-2000 WHERE name='xixi'" #給xixi減去2000 insertSQL2="UPDATE account set balance=balance+2000 WHERE name='beibei'" #給beibei加2000 cursor = conn.cursor() cursor.execute(insertSQL0) #執行insertSQL0 conn.commit() #提交insertSQL0的語句到資料庫裡 cursor.execute(insertSQL1) #執行insertSQL1 raise Exception #發生錯誤跳到except Exception as e cursor.execute(insertSQL2) cursor.close() conn.commit() except Exception as e: #如果捕捉到錯誤 conn.rollback() #執行回滾事務到上一次commit的地方程式碼繼續往下走 conn.commit() cursor.close() conn.close()
查詢account表結果:
+------+--------+---------+
| id | name | balance |
+------+--------+---------+
| 1 | xixi | 10000 |
| 2 | beibei | 10000 |
| 3 | yeye | 4000 |
+------+--------+---------+