前言:在当今数据驱动的时代,与数据库交互是许多应用程序开发的核心部分。
目录
二、pymysql 登场:让 Python 和 MySQL “勾搭” 起来
一、MySQL 基础:先打地基,才能建高楼
在开始用 pymysql 玩转 MySQL 前,咱得先了解点 MySQL 的基础,这就好比盖房子前得先把地基打牢。
(一)数据库是啥?
数据库,简单来说就是个 “大仓库”,能帮咱把各种信息整整齐齐地存起来,想用的时候随时拿。就好比你把玩具都放进玩具箱,找起来方便多了。
(二)表又是啥?
表?就是这大仓库里的 “小隔间”。不同的小隔间放不同的玩意儿,比如一个隔间放玩具,一个放书。在数据库里,一个表通常存一类相关的信息,像一个表存用户信息,一个表存订单信息。
(三)常见的 MySQL 数据类型
-
整数类型(INT) :就如同数数用的数字,1、2、3 这样。用它来存年龄、数量这些整数再合适不过啦。
-
字符串类型(VARCHAR) :这可是个 “万能宝贝”,能存字母、数字、汉字等各种字符组合,像姓名、地址这些信息,用它准没错。
-
日期类型(DATE) :专门用来存日期,像生日、纪念日啥的,用它来存特方便,而且查询起来也容易。
(四)简单的数据库操作命令
-
创建数据库 :
CREATE DATABASE 数据库名;
就像说 “给我整一个叫 XX 的大仓库”。 -
查看所有数据库 :
SHOW DATABASES;
就像把仓库清单拿出来瞅瞅,看看都有啥仓库。 -
创建表 :
CREATE TABLE 表名 (字段名 数据类型,...);
就像在仓库里定做小隔间,得说好隔间里每个位置放啥类型的东西,比如一个位置放名字(用 VARCHAR),一个位置放年龄(用 INT)。 -
插入数据 :
INSERT INTO 表名 (字段 1,字段 2,...) VALUES (值 1,值 2,...);
就像往小隔间里放宝贝,把对应的信息放到对应的格子里。 -
查询数据 :
SELECT * FROM 表名;
就是把小隔间里的所有宝贝都掏出来瞅瞅,要是只瞅某个特定宝贝,可以用SELECT 字段名 FROM 表名 WHERE 条件;
。 -
更新数据 :
UPDATE 表名 SET 字段名 = 新值 WHERE 条件;
就像把小隔间里某个宝贝给换了个模样。 -
删除数据 :
DELETE FROM 表名 WHERE 条件;
就像把小隔间里某个不要的宝贝直接扔掉。
二、pymysql 登场:让 Python 和 MySQL “勾搭” 起来
了解了 MySQL 基础,咱就引入 pymysql,这可是让 Python 和 MySQL 能愉快 “聊天” 的关键角色。
(一)为啥要用 pymysql?
要是手动在命令行里一条条敲 MySQL 命令,那得多累啊,而且要是写个程序,还得一个个去操作,这效率得多低下。pymysql 就像个 “翻译官”,在 Python 里头,通过简单的代码就能让 Python 和 MySQL 数据库交流,把刚才那些操作都变得简单快捷。
(二)pymysql 核心操作
-
连接数据库 :得先把 Python 和 MySQL 数据库连上啊,不然俩压根 “说不上话”。
-
pymysql.connect()
:这就是用来建立连接的,得把数据库的地址、用户名、密码啥的都传进去,就像给 “翻译官” 说好要去找哪个数据库玩。
-
-
创建游标 :
connection.cursor()
,有了连接后,这游标就好比是 “小跟班”,专门帮咱执行 SQL 命令。 -
执行 SQL 命令 :
cursor.execute()
,把刚才学的那些 MySQL 命令,像CREATE DATABASE
、INSERT INTO
这些,丢进去让它执行。 -
提交事务 :
connection.commit()
,要是执行了插入、更新、删除这些操作,得用这玩意儿,不然刚才的操作都白搭,数据库里头一点变化都没有。 -
关闭连接 :
connection.close()
,用完了得关掉连接,不然数据库那边一直开着 “通道”,多浪费资源啊。
三、敲开数据库大门 —— 连接数据库
好啦,环境弄好了,咱就正式开始和数据库 “交朋友” 啦!
import pymysql
# 连接到MySQL数据库
connection = pymysql.connect(
host='localhost', # 数据库服务器地址,本地就是localhost
user='你的用户名', # 用户名
password='你的密码', # 对应的密码
charset='utf8mb4', # 设置字符编码,支持各种有趣的字符
cursorclass=pymysql.cursors.DictCursor # 让查询结果像字典一样好用
)
上面这段代码就是连接数据库的关键啦。connection
就像是一座桥,把你的 Python 程序和 MySQL 数据库给连起来了。要是连都不连,那后面的操作不都白搭嘛!
四、搞点 “大动作” —— 创建数据库和表
连上数据库了,咱得干点实在的,先整俩 “小窝” —— 数据库和表。
try:
# 创建数据库
with connection.cursor() as cursor:
# 执行SQL语句:创建名为 '我的数据库' 的数据库,不存在就创建,存在就凑合用
cursor.execute("CREATE DATABASE IF NOT EXISTS `我的数据库`")
# 显示当前所有数据库,瞅瞅新建的那个在不在
cursor.execute("SHOW DATABASES")
# 打印所有数据库名称,就像拆盲盒,看看都有啥
for db in cursor:
print(db['Database'])
这不,咱就创建了个叫 “我的数据库” 的数据库。IF NOT EXISTS
就是说,要是已经有了,咱也不折腾,将就用呗。接着用SHOW DATABASES
瞅瞅都有啥数据库,就像打开宝藏箱,看看都有啥宝贝。
# 创建表,把数据库当仓库,表就是里面的小隔间
with connection.cursor() as cursor:
# 选择 '我的数据库' 数据库,得先进去才能整表
cursor.execute("USE `我的数据库`")
# 创建 '我的表' 表,得想想表里得放啥玩意儿
cursor.execute("""
CREATE TABLE IF NOT EXISTS `我的表` (
id INT PRIMARY KEY AUTO_INCREMENT, # 编号,自动增长,省得咱手动写
姓名 VARCHAR(255), # 放姓名,能写好多字
年龄 INT # 放年龄,整数
)
""")
# 显示表结构,就像看看小隔间长啥样
cursor.execute("DESCRIBE `我的表`")
# 打印表的列信息,瞅瞅都有啥字段
for col in cursor:
print(col)
接着,咱进入新建的数据库,创建了个 “我的表”,里面有个自动增长的 id,还有姓名和年龄两个字段,这不就把咱想存的个人信息都涵盖啦?
五、往 “小窝” 塞宝贝 —— 插入数据
有了表,咱得往里面塞点数据,不然空空如也多无聊。
# 插入数据
with connection.cursor() as cursor:
# 插入单条数据,就像往隔间放个小玩具
cursor.execute(
"INSERT INTO `我的表` (姓名, 年龄) VALUES (%s, %s)",
('张三', 20)
)
# 插入多条数据,一次性多放几个,效率高
cursor.executemany(
"INSERT INTO `我的表` (姓名, 年龄) VALUES (%s, %s)",
[
('李四', 25),
('王五', 30)
]
)
# 提交事务,就像把放进去的宝贝摆好,不然就白搭啦
connection.commit()
咱先插入一条张三的数据试试水,然后一次性又塞进去李四和王五的数据。commit()
就像最后确认摆好啦,不然前面的努力都白费。
六、瞅瞅 “宝贝” —— 查询数据
塞进去数据了,得瞅瞅对不对吧,这就得用查询。
# 查询数据
with connection.cursor() as cursor:
# 查询所有数据,就像把小隔间里的宝贝全倒出来瞅瞅
cursor.execute("SELECT * FROM `我的表`")
# 获取所有查询结果,这下能好好欣赏啦
results = cursor.fetchall()
print("所有记录:")
for row in results:
print(row)
SELECT * FROM
就是把表里的所有数据都捞出来,fetchall()
就像把捞出来的数据全放到一个大盘子里,方便咱一一对比查看。
七、给 “宝贝” 美容 —— 更新数据
瞅着瞅着,发现某个数据不对劲,这得改改,就像给宝贝美容。
# 更新数据
with connection.cursor() as cursor:
# 更新数据,把年龄不对的给改过来
cursor.execute(
"UPDATE `我的表` SET 年龄 = %s WHERE 姓名 = %s",
(22, '张三')
)
# 提交事务,让更改生效,不然还是旧模样
connection.commit()
把张三的年龄从 20 改成 22,UPDATE
就像给数据换个新衣服,WHERE
就是精准定位要改的那个。
八、给 “宝贝” 大扫除 —— 删除数据
要是觉得某个数据没啥用了,就像大扫除一样给它清理掉。
# 删除数据
with connection.cursor() as cursor:
# 删除数据,把多余的给扔了
cursor.execute(
"DELETE FROM `我的表` WHERE 姓名 = %s",
('李四',)
)
# 提交事务,让删除生效,不然还在里面占地方
connection.commit()
把李四这条数据删掉,DELETE
就像把不要的宝贝直接扔垃圾桶。
九、最后的 “收尾工作” —— 关闭数据库连接
玩得差不多了,得干最后的收尾工作,把数据库连接关了。
finally:
# 关闭数据库连接,就像用完玩具要收拾好
connection.close()
在 finally
块里调用 connection.close()
,不管前面操作咋样,都得把连接关好,不然就像玩具没收拾,容易丢,还占地方。
宝子们,是不是感觉超有趣?这下用 pymysql 玩转 MySQL 数据库是不是简单得很?快去试试吧,要是有啥问题,咱再一起琢磨琢磨!