用Python操作MySQL(pymysql)


用python來操作MySQL,首先需要安裝PyMySQL庫(pip install pymysql)。

 

連接MySQL:

import pymysql
connect=pymysql.connect(host='localhost',user='root',password='xxxx',port=3306)

注:此時還未創建數據庫,如已創建數據庫,在連接時需再加上一個參數db

注:host為指定的連接服務器的地址,設置為'localhost'代表連接到本地的MySQL服務上,user為用戶名,password為密碼,port為指定的端口(默認為3306)。

 

創建游標:(我們需要用游標來執行各種操作)

cursor=connect.cursor()

 

關閉游標:

cursor.close()

 

關閉連接:

connect.close()

 

執行單條sql語句:

cursor.execute(...)

 

執行多條sql語句:

cursor.executemany(...)

 

提交事務:

connect.commit()

 

回滾事務:

connect.rollback()

 

在Python中對數據庫進行增刪改等操作使用的是事務處理,因此在執行增刪改SQL語句后,需要提交事務才能在數據庫中完成操作,並且還需添加錯誤判斷,當執行SQL語句失敗后,需要對事務進行回滾。增刪改模板如下:

sql='...'

try: cursor.execute(sql) connect.commit() except: connect.rollback()

 

創建數據庫:

cursor.execute("CREATE DATABASE db_test DEFAULT CHARACTER SET utf8")   #創建名為db_test的數據庫

 

選擇數據庫:

connect.select_db('db_name')

 

創建表:

sql='CREATE TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL,name VARCHAR(255)\
NOT NULL,age INT NOT NULL,PRIMARY KEY(id))'  #創建一個名為students的數據表,分為id,name和age三列,其中id為主鍵
cursor.execute(sql)

 

插入數據:

id='001'
name='Hu'
age=5

sql='INSERT INTO students(id,name,age) VALUES (%s,%s,%s)'

try:
    cursor.execute(sql,(id,name,age))
    connect.commit()
except:
    connect.rollback()

 

修改數據:

sql='UPDATE students SET age=%s WHERE name=%s'

try:
    cursor.execute(sql,(4,'Hu'))
    connect.commit()
except:
    connect.rollback()

 

更新數據(如果數據存在,則更新數據,如果數據不存在,則插入數據):

data={'id':'002',
      'name':'Bo',
      'age':11}
#為了方便修改數據,把數據以字典形式傳入,這樣就不需要修改sql語句了

table='students'

keys=','.join(data.keys())
values=','.join(['%s']*len(data))

sql='INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE '.format(table=table,keys=keys,values=values)
#相當於INSERT INTO students(id,name,age) VALUES (%s.%s,%s) ON DUPLICATE KEY UPDATE

update=','.join(["{key}=%s".format(key=key) for key in data.keys()])
#相當於id=%s,name=%s,age=%s

sql=sql+update

try:
    cursor.execute(sql,tuple(data.values())*2)
    connect.commit()
    print("Sucessful")
except:
    connect.rollback()
    print("Failed")

 

刪除數據:

sql='DELETE FROM xxx WHERE ...'

try:
    cursor.execute(sql)
    connect.commit()
except:
    connect.rollback()

 

連接MySQL數據庫+增刪改操作的完整模板如下:

import pymysql

connect = pymysql.connect(host='...',   # IP地址
                port=3306,   # 端口號
                user='...',   # 用戶名
                password='...',   # 密碼
                db='...',   # 數據庫名
                charset='utf8')   # 鏈接字符集

cursor = connect.cursor()   # 創建游標

sql='...'

try:
    cursor.execute(sql)  # 執行SQL語句
    connect.commit()   # 提交事務
except Exception as e:
    connect.rollback()  # 如果發生錯誤,則回滾事務
finally:
    cursor.close()  # 關閉游標
    connect.close()  # 關閉數據庫

 

查詢數據:

sql='SELECT * FROM xxx WHERE ...'
cursor.execute(sql)

 

獲取查詢結果的條數:

cursor.rowcount

 

獲取第一條數據:(元組形式)

cursor.fetchone()

 

獲取所有數據:

cursor.fetchall()

 

獲取指定數量的數據:

cursor.fetchmany(num)

 

逐條獲取數據:

results = cursor.fetchall()

for row in results:
    print(row)

fetchall()會將結果以元組形式全部返回,如果數據量很大,那么占用的開銷會非常高。因此,推薦使用如下方法來逐條讀取數據:

row=cursor.fetchone()

while row:
    print(row)
    row=cursor.fetchone()

 

總結來說,執行什么樣的操作要根據SQL語句來定。因此需要學習好SQL的語法。

 

參考:https://cuiqingcai.com/5578.html

           https://cloud.tencent.com/developer/article/1457448

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM