(十七)Python中級知識-Mysql數據庫操作(mysql.connector模塊)

1、概述

首先要操作MySql數據庫之前,我們需要做兩件事:

  • (1)、安裝MySql數據庫程序
  • (2)、安裝MySql數據庫與Python的連接器程序(Mysql-connector-python)

安裝MySql數據庫程序,本例程使用的是MySql5.7社區版,可以上官網下載安裝最新版官網下載地址

在Windows10下安裝Mysql-connector-python,打開PyCharm編譯器下的Terminal命令窗口輸入如下命令:

pip install mysql-connector-python -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

這段命令後半部分的解釋:-i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com,採用國內阿里鏡像下載,如果不加很有可能會下載失敗,提示連接超時。

MySql數據和Mysql-connector-python數據庫連接器安裝好之後,我們纔可以在PyCharm編譯器中導入mysql.connector模塊。

import mysql.connector  

2、案例

案例的書寫流程,如下:

  • 創建數據庫連接
  • 獲取數據庫操作遊標
  • 創建數據庫
  • 創建數據表
  • 增、刪、改、查操作
案例如下:
import mysql.connector  

# 數據庫名
databaseName = "people"

# 獲取Mysql驅動連接對象
conn = mysql.connector.connect(user='root', password='111111', host='localhost')
print(conn)

# 獲取一個操作數據的遊標
cur = conn.cursor()

# 判斷數據庫people是否已經存在的標記
isExistDatabase = False
# 檢查pytest數據庫是否存在,如果存在則True
cur.execute("SHOW DATABASES")
for x in cur:
    # x 是一個元組 ,[0]爲數據庫名稱
    if x[0] == databaseName:
        isExistDatabase = True

# 如果數據庫不存在,則創建數據庫
if not isExistDatabase:
    cur.execute("CREATE DATABASE " + databaseName)
    print("創建數據庫" + databaseName + "成功")


# 函數-在指定數據庫下創建數據表
def ceateTable(cursor, database):
    # 選擇 people 這個數據庫
    cursor.execute("use " + database)
    # sql中的內容爲創建一個名爲user的表
    sql = """CREATE TABLE IF NOT EXISTS `user` (
              `id` VARCHAR (40) PRIMARY KEY,
              `name` VARCHAR (255),
              `age` INT DEFAULT 1
              )"""
    # 如果存在user這個表則刪除
    cursor.execute("drop table if exists user")
    # 創建表
    cursor.execute(sql)
    print("數據表user創建成功")


# 函數-在user表插入一條數據
def insertRecord(cursor, isMuli):
    # 開始插入數據
    sql = "INSERT INTO user (id,name,age) VALUES (%s,%s,%s)"
    # 無論是數字(包括整數和浮點數)、字符串、日期時間或其他任意類型,都應該使用 % s佔位符。
    if isMuli:
        val = [("9528", "小花", 19),
               ("9529", "小黑", 20),
               ("9530", "小紅", 21)]
        cursor.executemany(sql, val)
    else:
        val = ("9527", "小明", 18)
        cursor.execute(sql, val)
    # 數據表內容有更新,必須使用到該語句
    conn.commit()
    print(cursor.rowcount, "條記錄插入成功。")


# 函數-查詢數據表記錄
def selectAll(cursor):
    cursor.execute("SELECT * FROM user")
    result = cursor.fetchall()  # fetchall() 獲取所有記錄
    return result


# 函數-根據Id查詢對應的數據表記錄
def selectList(cursor, id):
    cursor.execute("SELECT * FROM user where id=" + id)
    result = cursor.fetchall()  # fetchall() 獲取所有記錄
    return result


# 函數-根據Id刪除對應的數據表記錄
def delById(cursor, id):
    sql = "DELETE FROM user WHERE id = %s"
    val = (id,)  # 此處逗號一定不能省
    cursor.execute(sql, val)
    conn.commit()
    print(cursor.rowcount, " 條記錄被刪除")


# 函數-根據Id修改對應的數據表記錄
def updateById(cursor, id, name):
    sql = "UPDATE user SET name = '" + name + "' WHERE id = '" + id + "'"
    cursor.execute(sql)
    conn.commit()
    print(cursor.rowcount, " 條記錄被修改")


print("***********創建數據表***********")
# 創建數據表函數
ceateTable(cur, databaseName)
print("***********插入一條數據***********")
# 向數據表插入一條數據
insertRecord(cur, False)
print("***********插入多條數據***********")
# 向數據表插入多條數據
insertRecord(cur, True)

print("***********查詢所有記錄***********")
users = selectAll(cur)
for u in users:
    print("id=" + u[0] + ",name=" + u[1] + ",age=" + str(u[2]))

print("***********根據ID查詢記錄***********")
users = selectList(cur, "9527")
for u in users:
    print("id=" + u[0] + ",name=" + u[1] + ",age=" + str(u[2]))

print("***********根據ID刪除記錄***********")
delById(cur, "9527")

print("***********根據ID修改記錄***********")
updateById(cur, "9528", "小灰")

print("***********再次查詢所有記錄***********")
users = selectAll(cur)
for u in users:
    print("id=" + u[0] + ",name=" + u[1] + ",age=" + str(u[2]))

# 關閉遊標
cur.close()

輸出結果:
<mysql.connector.connection_cext.CMySQLConnection object at 0x00000226F1ADB128>
創建數據庫people成功
***********創建數據表***********
數據表user創建成功
***********插入一條數據***********
1 條記錄插入成功。
***********插入多條數據***********
3 條記錄插入成功。
***********查詢所有記錄***********
id=9527,name=小明,age=18
id=9528,name=小花,age=19
id=9529,name=小黑,age=20
id=9530,name=小紅,age=21
***********根據ID查詢記錄***********
id=9527,name=小明,age=18
***********根據ID刪除記錄***********
1  條記錄被刪除
***********根據ID修改記錄***********
1  條記錄被修改
***********再次查詢所有記錄***********
id=9528,name=小灰,age=19
id=9529,name=小黑,age=20
id=9530,name=小紅,age=21

例子並不複雜,本文就不再單獨提出某個函數的具體解釋了,代碼中的註釋已經寫得非常清晰,讀者可以嘗試運行代碼直接觀察會更加直觀。

3、總結

在實際開發過程中對數據庫的操作使用非常頻繁,我們至少需要掌握最基本的增刪改查。
在案例中反覆用到了cursor.execute()這個函數,這個函數可以直接執行我們的sql語句,使用非常方便。
執行多條記錄插入數據表的時候,可以使用cursor.executemany()這個函數。
數據表內容有更新,必須使用該語句conn.commit()。
數據查詢返回的結果是一個元組列表。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章