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()。
數據查詢返回的結果是一個元組列表。