1.概述
數據庫是長期儲存在計算機內、有組織的、可共享的數據集合。數據庫中的數據指的是以一定的數據模型組織、描述和儲存在一起、具有儘可能小的冗餘度、較高的數據獨立性和易擴展性的特點並可在一定範圍內爲多個用戶共享。
這種數據集合具有如下特點:儘可能不重複,以最優方式爲某個特定組織的多種應用服務,其數據結構獨立於使用它的應用程序,對數據的增、刪、改、查由統一軟件進行管理和控制。
在信息化社會,充分有效地管理和利用各類信息資源,是進行科學研究和決策管理的前提條件。數據庫技術是管理信息系統、辦公自動化系統、決策支持系統等各類信息系統的核心部分,是進行科學研究和決策管理的重要技術手段。
MySQL是一種開放源代碼的關係型數據庫管理系統(RDBMS),使用最常用的數據庫管理語言–結構化查詢語言(SQL
)進行數據庫管理。MySQL因爲其速度、可靠性和適應性而備受關注。
2.MySQL指令
MySQL指令屬於基礎中的基礎,在此不再贅述。
如果你不瞭解MySQL相關指令,推薦參考MySQL 教程 | 菜鳥教程
3.Python與MySQL的交互
(1)安裝pymysql模塊
- 在管理員身份下打開控制檯
- 輸入
pip install pymysql
- 等待完成,若輸出successful則爲成功。若失敗請檢查網絡連接或當前身份
(2)引入pymysql模塊
在Python文件中,使用import pymysql
引入pymysql模塊。
(3)連接數據庫
conn = pymysql.connect(
host="127.0.0.1", # 地址,默認只支持本地,如特別需要請修改mysql.user表
port=3306, # 端口號
user="root", # 用戶名
password="123", # 密碼
database="stu", # 所選數據庫名稱
charset="utf8" # 編碼方式
)
print(conn)
# <pymysql.connections.Connection object at 0x00000047CEBC9B00>
# 連接成功生成一個對象
(4)生成遊標對象
遊標相當於一個python中對mysql操作的管家,我們將需要執行的操作全部交給遊標,遊標再調用相應方法執行該操作。
# 生成遊標對象
cursor = conn.cursor()
(5)創建數據表
服務器數據庫創建數據表過程:
- 連接數據庫
- 創建遊標
- 定義創建數據表sql語句
- 執行sql語句
- 關閉數據庫連接
# 連接數據庫 略
# 生成遊標對象
cursor = conn.cursor()
# 創建表格
sql_create = """
CREATE TABLE if NOT EXISTS student(
sno VARCHAR(16) NOT NULL PRIMARY KEY ,
name VARCHAR(16) NOT NULL ,
sex CHAR(4) NOT NULL ,
age INT(3) NOT NULL
)ENGINE = InnoDB DEFAULT CHARSET = 'utf8'
"""
# 執行sql語句
result = cursor.execute(sql_create)
# 關閉數據庫連接
conn.close()
(6)插入數據
服務器數據庫數據的插入過程:
- 連接數據庫
- 獲取遊標對象
- 定義插入語句
- 執行executemany()完成多條數據的插入
- 執行數據commit操作完成數據的提交(最終執行表格數據存儲)
- 關閉數據庫
# 連接數據庫
# 生成遊標對象
cursor = conn.cursor()
# 執行插入數據操作 字符串處理
sql_insert = """
INSERT INTO student(sno, name, sex, age) VALUES (%s, %s, %s, %s)
"""
# cursor.executemany() 添加任意多條數據
result = cursor.executemany(sql_insert, [("15", "二狗", "男", 20), ("16", "三毛", "男", 25), ("17", "狗蛋", "男", 35)])
print(result)
# 3
# 數據提交
conn.commit()
# 關閉數據庫
conn.close()
注:切記數據的增、改、刪等數據控制操作需要使用conn.commit()提交,否則數據庫不會獲取數據。
詳見Python與MySQL交互中Python提交添加數據操作但數據庫並未添加問題解決方案
(7)查詢數據
服務器數據庫數據的查詢過程:
- 連接數據庫
- 獲取遊標對象
- 定義查詢語句
- 執行execute()完成數據查詢
- 使用cursor.fetchall()、cursor.fetchmany(size=None)、cursor.fetchone()獲取數據
- 關閉數據庫
# 創建連接
# 生成遊標對象 cursor=pymysql.cursors.DictCursor : 保證數據在查詢之後以字典的形式返回給外界,默認是以元組類型返回
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql_select = "select * from student"
result = cursor.execute(sql_select)
"""
獲取查詢結果操作
cursor.fetchall():從查詢結果中返回所有查詢內容
cursor.fetchmany(size=None):從查詢結果中獲取指定size的數據
cursor.fetchone():從查詢結果中獲取一條數據
"""
# print(cursor.fetchall())
# print(cursor.fetchone())
print(cursor.fetchmany(3))
# [{'sno': '11', 'name': '二狗', 'sex': '男', 'age': 20}, {'sno': '12', 'name': '狗剩子', 'sex': '男', 'age': 25}, {'sno': '13', 'name': '狗蛋', 'sex': '男', 'age': 35}]
# 每輸出一條數據,cursor內數據都會減一條
# 關閉連接
conn.close()
(8)刪除數據
服務器數據庫數據的刪除過程:
- 連接數據庫
- 獲取遊標對象
- 定義刪除語句
- 執行execute()完成數據的刪除
- 執行數據commit操作完成數據的提交(最終執行表格數據存儲)
- 關閉數據庫
# 創建連接
# 生成遊標對象
cursor = conn.cursor()
# 定義sql語句
sql_delete = "delete from student where sno = %s or name = %s"
# 執行
result = cursor.execute(sql_delete, ("11",))
# 提交
conn.commit()
# 關閉連接
conn.close()
(9)數據更新
服務器數據庫數據的更新過程:
- 連接數據庫
- 獲取遊標對象
- 定義更新語句
- 執行execute()完成數據的更新
- 執行數據commit操作完成數據的提交(最終執行表格數據存儲)
- 關閉數據庫
# 創建連接
# 生成遊標對象
cursor = conn.cursor()
# 定義sql語句
sql_update = "update student set name = %s , sex = %s where sno = %s"
# 執行
result = cursor.execute(sql_update, ("狗剩子", "男", "12"))
# 提交
conn.commit()
# 關閉數據庫
conn.close()