一、引言
MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛应用于Web开发、数据分析等领域。它提供了高效、稳定的数据存储和查询功能。同时,Python作为一种强大的编程语言,也提供了多种与MySQL交互的库,其中pymysql就是其中之一。本文将介绍MySQL数据库的基础使用,并通过Python的pymysql库进行实际操作。
二、MySQL数据库基础
注意
文章中前面的MySQL部分特意使用了MySQL服务器自带的名为mysql
的系统数据库,这个数据库用于存储与MySQL服务器自身操作和维护相关的元数据(metadata)和系统表。比如里面有个user表,这个表存储了MySQL的用户账号信息,包括用户名、密码、主机地址、权限等。其他的几个表由于配置MySQL一般不用,这里我就不解释了,可以自行上网查找资料了解一下。
1.安装MySQL
- 在Linux系统中,可以通过包管理器(如apt、yum)进行安装。命令行输入:sudo apt install mysql-server和sudo apt install mysql-client。
- 在Windows系统中,可以访问MySQL官网下载并安装MySQL安装包。或者用我网盘里的资源。链接:https://pan.baidu.com/s/1lO_XBxy9FOsvSis6zpPY8A?pwd=5as7
提取码:5as7
2.连接到MySQL
在命令行中输入mysql -u 用户名 -p
,然后输入密码连接到MySQL。成功连接后,将看到MySQL的命令行提示符。一般都是root用户,直接输入mysql -u root -p回车然后输入密码就行了。Ubuntu上和Windows都是这样。
3.退出数据库
在mysql>提示符下输入quit或者exit就可以退出MySQL交互操作界面。
4.显示当前服务器版本
使用SELECT VERSION();
命令可以查看当前MySQL服务器的版本信息。
5.显示当前时间
使用SELECT NOW();
命令可以查看当前的日期和时间。
6.显示当前用户
使用SELECT USER();
命令可以查看当前连接的MySQL用户。
7.显示所有数据库名称
使用SHOW DATABASES;
命令可以列出MySQL服务器上的所有数据库。
8.使用数据库
使用USE my_db;
命令可以选择一个数据库作为当前操作的数据库,其中my_db
是数据库的名称。
9.创建数据库和表
创建数据库和表的语句就是sql语句中的CREATE DATABASE
和CREATE TABLE
,不熟悉的可以去我前两篇文章看一下。这里要说的是在MySQL里要想创建表,需要先选中一个数据库,选择数据库就是上面说的USE
语句,比如use mydb就选择了MySQL里的mydb数据库,然后就可以在这个数据库创建表了。
10.显示当前数据库所有表
在选择了数据库之后,可以使用SHOW TABLES;
命令列出该数据库中的所有表。
11.查看数据库字符集编码
使用SHOW CREATE DATABASE my_db;
命令可以查看指定数据库的创建语句,从而得知数据库的字符集编码等信息。
12.查看数据表创建语句
使用SHOW CREATE TABLE my_tb;
命令可以查看指定表的创建语句,包括表的字段、索引等信息。
13.查看数据表字段信息
使用SHOW COLUMNS FROM my_tb;
或者
describe my_tb;
命令可以查看指定表的字段信息,包括字段名、数据类型、是否允许为空等。
14.查看警告信息
在某些情况下,MySQL会返回警告信息而不是错误。使用SHOW WARNINGS;
命令可以查看这些警告信息。
三、Python中使用pymysql库操作MySQL
1.安装pymysql库
在Python中,我们可以使用pymysql库来执行上述的MySQL命令。首先,需要安装pymysql库,可以使用pip命令进行安装:
pip install pymysql
2.连接到MySQL数据库
使用pymysql库的connect()
方法连接到MySQL数据库,并指定主机名、用户名、密码、数据库名等参数。或者使用pymysql库的Connection()对象来连接数据库,代码如下:
import pymysql
# 使用connect方法
# 创建连接
connection = pymysql.connect(
host='localhost',
port=3306,
user='root',
password='123456',
database='py_sql',
charset='utf8mb4' # 使用utf8mb4字符集支持全字符集
)
# 使用Connection对象
conn = pymysql.Connection(
host="localhost",
port=3306,
user="root",
password="123456",
)
# 参数是通用的,这里没有指定连接的database后面也可以用conn.select_db("py_sql")来选择要操作的数据库
3.执行SQL语句
使用游标对象的execute()
方法执行SQL语句。
cursor = conn.cursor() # 获取游标对象
cursor.execute("select * from student") # 执行sql语句
4.获取查询结果
对于查询语句,可以使用游标对象的fetchone()
或fetchall()
方法获取查询结果。
注意:这两个方法是有类似于指针的效果的,当你使用 fetchone()
方法时,它会从结果集的当前位置获取一条记录,并将内部的位置指针向后移动一位。如果你之后调用 fetchall()
,它将从当前位置开始获取所有剩余的记录。
比如我现在数据库student表里有6条数据,分别为
(1, '小明', 31, '男')
(2, '小红', 33, '女')
(3, '小黑', 35, '男')
(4, '小王', 31, '男')
(5, '小米', 37, '女')
(6, '小哈', 32, '女')
我现在执行了一句sql语句select * from student,当我调用了一次fetchone()语句之后,打印这个结果是(1, '小明', 31, '男'),当我再调用fetchall()语句的时候,打印的结果为(2, '小红', 33, '女'),(3, '小黑', 35, '男'),(4, '小王', 31, '男'),(5, '小米', 37, '女'),(6, '小哈', 32, '女')。
两者的区别:
fetchone()
方法用于从查询结果中获取单条记录。这个方法在处理大量数据时特别有用,因为它允许你逐条处理记录,而不是一次性加载所有记录到内存中。fetchall()
方法用于获取查询结果中的所有剩余记录。使用fetchall()
时需要小心,因为如果查询结果很大,它会消耗大量内存来存储所有记录。不过在处理小量数据或确保结果集不会过大的情况下,使用fetchall()
可以更方便地一次性获取所有数据。
result: tuple = cursor.fetchone()
print(result)
results: tuple = cursor.fetchall()
print(results)
5.关闭游标和连接
在操作完成后,使用close()
方法关闭游标和连接,释放资源。
# 关闭游标对象
cursor.close()
# 关闭数据库的链接
conn.close()
6.代码汇总
import pymysql
# 创建连接
connection = pymysql.connect(
host='localhost',
port=3306,
user='root',
password='123456',
database='py_sql',
charset='utf8mb4' # 使用utf8mb4字符集支持全字符集
)
try:
with connection.cursor() as cursor:
# 执行SQL命令,例如查看当前时间
# cursor.execute("SELECT NOW();")
# 显示当前服务器版本
cursor.execute("SELECT VERSION();")
result = cursor.fetchone()
print("当前时间:", result[0])
finally:
connection.close() # 关闭连接