在 python 中 mysql 數(shù)據(jù)庫的簡單使用庶近,此處不介紹 mysql 數(shù)據(jù)庫的使用
1. 下載pymysql軟件包
命令行窗口運行pip install pymysql
枢纠,即可安裝pymysql包,注:pip在下載python時已經(jīng)自帶筹裕。
如果 在下載時發(fā)現(xiàn)是下載速度較慢可以更換pip的下載的地址 (此處的是清華大學的鏡像)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
輸入完上面的代碼,設置鏡像地址后窄驹,再重新安裝即可使用鏡像下載朝卒。
擴展知識:pip config unset global.index-url 表示不設置下載源,即恢復默認下載地址.
2. 使用pymysql工具
2.1 與數(shù)據(jù)庫建立連接
從pymysql中導入連接對象乐埠,并提供連接數(shù)據(jù)庫信息創(chuàng)建連接對象
# 導入pymysql
from pymysql import Connection
# 提供相關參數(shù)建立數(shù)據(jù)庫連接
conn = Connection(
host="localhost", # 地址
port=3306, # 端口號
user="root", # 用戶名
password="123456", # 密碼
autocommit=True # 自動提交
)
此處的
autocommit=True # 自動提交
是設置為默認提交抗斤,當然你也可以選擇手動提交(默認值為False囚企,即不自動提交),只需要在希望更新數(shù)據(jù)庫時調用conn.commit()
即可瑞眼。其底層就是mysql的事務transaction龙宏。
2.2 執(zhí)行sql語句
要執(zhí)行sql語句首先需要獲取到 cursor 游標對象(鼠標),通過 cursor 的 execute(str) 方法去執(zhí)行slq語句伤疙,具體方式如下:
# 獲取游標對象
cursor = conn.cursor()
# 執(zhí)行sql語句
cursor.execute("create database test") # 創(chuàng)建數(shù)據(jù)庫test
上面執(zhí)行的語句是創(chuàng)建數(shù)據(jù)庫银酗,并沒有指定當前使用的數(shù)據(jù)庫。如果你要對某個數(shù)據(jù)庫內(nèi)進行操作時徒像,需要先指定當前連接的數(shù)據(jù)庫具體是哪個黍特。這里我們就選擇使用剛創(chuàng)建的test的數(shù)據(jù)庫了。
注意:如果創(chuàng)建的數(shù)據(jù)庫已經(jīng)存在锯蛀,即sql語句無法正常運行衅澈,代碼本身是會拋出異常中斷的。
如果已經(jīng)執(zhí)行了這段代碼谬墙,你可以選擇:
- 刪除數(shù)據(jù)庫 test
- 將
cursor.execute("create database test")
暫時注釋掉- 在創(chuàng)建數(shù)據(jù)庫的前面添加條件刪除語句
drop database if exists test
(包括下面create table 創(chuàng)建表 的語句也是如此今布,后面就不在提示了,這里我就用方法2拭抬,直接注釋掉了)
# 為連接指定數(shù)據(jù)庫
conn.select_db("test") # 指定使用數(shù)據(jù)庫為test
# 創(chuàng)建表user
cursor.execute(
"""
create table user
(
id int primary key auto_increment comment '用戶身份標識',
username varchar(20) comment '用戶名',
password varchar(20) comment '密碼'
) comment '用戶表';
"""
)
2.3 基本 增刪改查 示例
基本的 增刪改 操作都是直接使用 cursor.execute() 執(zhí)行相應sql語句即可部默,對了,如果在創(chuàng)建連接的時候沒有設置autocommit=True
自動提交的話造虎,在進行完以下操作后傅蹂,執(zhí)行conn.commit()
提交更改,當然我設置了自動提交算凿,這里就把它注釋掉了份蝴。
# 增
cursor.execute("insert into user (username, password) values ('zhangsan', '123')") # 添加用戶1
cursor.execute("insert into user (username, password) values ('lisi', '1234');") # 添加用戶2
# 刪
cursor.execute("delete from user where id = 1") # 刪除id為1的用戶
# 改
cursor.execute("update user set password = '123456'") # 設置所有用戶密碼為123456
# 提交修改
# conn.commit()
對于查詢操作有些許特殊,因為他是需要一個返回值的氓轰。但基本思路和上面基本一致婚夫,只是在執(zhí)行完查詢語句后需要使用cursor.fetchall()
方法拿出結果。
# 查
cursor.execute("select * from user") # 執(zhí)行sql:獲取所有用戶信息
# 獲取執(zhí)行結果的返回信息署鸡,類型為元組嵌套案糙,即tuple[tuple[Any, ...], ...]
result: tuple = cursor.fetchall()
# 打印查詢的結果
for m in result:
print(m)
注意:如果執(zhí)行了多條sql查詢語句,cursor.fetchall() 只會拿回最近一次的返回數(shù)據(jù)靴庆,而前面的數(shù)據(jù)都會被覆蓋掉时捌。
2.4 關閉連接
這個按道理應該放在開頭,但是為了保證代碼的正確順序炉抒,而不至于太亂奢讨。所有我將其放在最后。就是關閉資源
# 關閉連接
cursor.close()
conn.close()
3 操作完整代碼
- sql代碼實現(xiàn):
# 創(chuàng)建數(shù)據(jù)庫test
create database test;
# 使用數(shù)據(jù)庫test
use test;
# 創(chuàng)建表user
create table user
(
id int primary key auto_increment comment '用戶身份標識',
username varchar(20) comment '用戶名',
password varchar(20) comment '密碼'
) comment '用戶表';
# 增
insert into user (username, password) values ('zhangsan', '123');
insert into user (username, password) values ('lisi', '1234');
# 刪
delete from user where id = 1;
# 改
update user set password = '123456';
# 查1
select * from user;
- python調用實現(xiàn):
# 導入pymysql
from pymysql import Connection
# 提供相關參數(shù)建立數(shù)據(jù)庫連接
conn = Connection(
host="localhost", # 地址
port=3306, # 端口號
user="root", # 用戶名
password="123456", # 密碼
autocommit=True # 自動提交
)
# 獲取游標對象
cursor = conn.cursor()
# # 執(zhí)行sql語句
# cursor.execute("create database test") # 創(chuàng)建數(shù)據(jù)庫test
# 為連接指定數(shù)據(jù)庫
conn.select_db("test") # 指定數(shù)據(jù)庫為test
# # 創(chuàng)建表user
# cursor.execute(
# """
# create table user
# (
# id int primary key auto_increment comment '用戶身份標識',
# username varchar(20) comment '用戶名',
# password varchar(20) comment '密碼'
# ) comment '用戶表';
# """
# )
# 增
cursor.execute("insert into user (username, password) values ('zhangsan', '123')") # 添加用戶1
cursor.execute("insert into user (username, password) values ('lisi', '1234');") # 添加用戶2
# 刪
cursor.execute("delete from user where id = 1") # 刪除id為1的用戶
# 改
cursor.execute("update user set password = '123456'") # 設置所有用戶密碼為123456
# 提交修改
# conn.commit()
# 查
cursor.execute("select * from user") # 獲取所有用戶信息
result: tuple = cursor.fetchall() # 獲取執(zhí)行結果的返回值焰薄,類型為元組嵌套拿诸,即tuple[tuple[Any, ...], ...]
# 打印查詢的結果
for m in result:
print(m)
# 關閉連接
cursor.close()
conn.close()