1. 程式人生 > >18.python關於mysql的api

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 |
+------+--------+---------+