使用PyMySQL操作MySQL数据库
安装
pip3 install PyMySQL
或者python3 -m pip install PyMySQL
连接MySQL数据库
注意:连接之前先确保你已经安装MySQL数据库
MYSQL_CONFIG = {
'host': 'localhost', # IP地址
'port': 3306, # 端口
'user': 'root', # 用户名
'passwd': '123456', # 密码
'db': 'myclass', # 数据库
'charset': 'utf8', # 编码
}
conn = pymysql.connect(**MYSQL_CONFIG) # 数据库连接
cur = conn.cursor() # 游标对象
MYSQL_CONFIG中的指标为连接数据库的重要参数,参数的相关说明请看以上注释,相关参数的值请换成你自己的。
本人习惯将参数以字典的方式存储,并在连接时用两个*号来对字典进行解包(有兴趣的小伙伴可以自行搜索python容器解包的相关知识),这样做的好处就是可以抽取关键数据,并将数据放在可配置化脚本中。
当然,你也可以用关键字参数的形式把数据写到connect()方法中,如pymysql.connect(host = 'localhost', port = 3306, ...)
创建连接后我们可以得到一个数据库连接对象conn和游标对象cur
执行SQL查询语句
成功连接数据库后,我们就可以执行相关的SQL语句来增删改查我们的数据了。
myclass数据库中存在student表,我们执行SQL语句来查询student表中的数据
数据表如下
name | age | height |
---|---|---|
Mary | 18 | 155.0 |
Tony | 20 | 175.0 |
Lisa | 19 | 165.5 |
执行SQL语句需要用到cur对象中的execute()方法
执行后获取数据的方法主要有以下三种:
- fetchone(): 获取下一个查询结果集,结果集是一个对象,第一次执行取SQL结果集的第一条数据
- fetchmany(n): 获取前n条数据的结果集
- fetchall(): 获取全部的数据结果集
fetchone
sql = "SELECT * FROM student"
n = cur.execute(sql) # 执行后得到数据的条数
for i in range(n):
print(f'--这是第{i + 1}条数据--')
info = cur.fetchone()
print(info)
执行结果如下
--这是第1条数据--
('Mary', 18, 155.0)
--这是第2条数据--
('Tony', 20, 175.0)
--这是第3条数据--
('Lisa', 19, 165.5)
n值是执行查询语句返回的结果条数,fetchone()第一次执行取的是第一条数据,之后执行就是取下一条数据,遍历n就可以取到每一条数据。
fetchmany
sql = "SELECT * FROM student"
n = cur.execute(sql) # 执行后得到数据的条数
info = cur.fetchmany(2) # 取前面两条数据
print(info)
执行结果如下
(('Mary', 18, 155.0), ('Tony', 20, 175.0))
fetchmany()可以取执行结果集的任意条数据,如果取n则返回全部数据的数据集。
fetchall
sql = "SELECT * FROM student"
n = cur.execute(sql) # 执行后得到数据的条数
info = cur.fetchall() # 取所有数据
print(info)
执行结果如下
(('Mary', 18, 155.0), ('Tony', 20, 175.0), ('Lisa', 19, 165.5))
fetchall()就是取执行结果的所有数据的数据集
执行SQL插入语句
上面已经对PyMySQL中SQL的查询方式进行了简单的说明和实现,至于其他的增、删、改操作其实跟上面的查询操作差不多,主要还是使用到cur对象的execute()方法来执行。
但是执行增、删、改操作时需要注意的是,在使用execute()方法执行SQL语句后,还要在后面加一句conn.commit(),用于将事务提交到数据库执行。
如下
sql = "INSERT INTO student VALUES ('Ben', 19, 166.5)"
cur.execute(sql) # 执行
conn.commit() # 提交
执行成功后,可以通过查询方法fatchall查看结果,结果如下
(('Mary', 18, 155.0), ('Tony', 20, 175.0), ('Lisa', 19, 165.5), ('Ben', 19, 166.5))
可以看到最后面多了一条新的数据,说明数据插入成功。
删和改的操作跟插入是一样的,在这里就不做过多演示了,有兴趣的小伙伴可以自己尝试去实现。
务必记得要加上commit()语句哦,否则执行后不会发生任何变化。
关闭数据库
在执行完增、删、改、查操作后,最后一定记得要关闭游标和数据库连接,以避免数据库资源的消耗和产生不同连接之间的冲突。
关闭语句如下
cur.close() # 关闭游标
conn.close() # 关闭数据库连接