数据库操作
数据库操作是每一门编程语言中都必不可少的操作。
使用程序操作数据库之前,需要在本地或服务器先安装数据库,比如 MySQL 数据库。
Python 中使用第三方模块 PyMySQL 操作数据库,使用前需要先进行安装。
安装 PyMySQL
pip install pymysql
操作流程
使用 PyMySQL
模块操作数据非常简单,步骤如下:
- 导入模块
- 连接数据库
- 创建游标对象
- 执行数据库操作
- 关闭游标对象
- 关闭数据库连接
导入模块
import pymysql
连接关闭数据库
操作数据库之前,需要先进行数据库连接,和使用其它方式操作数据库方式相同。
PyMySQL
模块提供了四个连接数据库的函数名,其本质是多个变量的函数引用横等赋值,最终还是执行一个函数。
官方代码:
Connect = connect = Connection = connections.Connection
按代码的赋值顺序,推荐使用 Connect
方式连接,其它函数使用方式相同。
连接数据库函数格式及主要参数如下:
Connect(host, port, user, password, database, charset)
host
:数据库主机的地址,默认为localhost
。port
:数据库的端口号,默认为3306
。user
:连接数据库所用的用户名。password
:连接数据库所用的密码。database
:要连接的数据库的名称。charset
:连接数据库时使用的字符集,默认为"utf8"。
目前本机已存在数据库 newcms
及数据库中的数据表。
import pymysql
db_connect = pymysql.Connect(host="localhost", port=3306, user="root", password="123123123", database="cms", charset="utf8")
print(db_connect)
db_connect.close()
数据库使用完毕后,需要调用 close()
方法将数据库连接对象关闭,让其断开数据库连接,避免资源泄漏。
获取和关闭游标对象
数据库连接对象创建成功后,还需要创建游标对象。
游标对象的作用是用来执行数据库操作,在执行完一次操作后,应调用 close()
方法将游标对象关闭。
在进行数据库操作时,每次数据库操作都应该建立一个游标对象,在操作完毕后将其关闭,不应使用一个游标对象进行多次操作。
PyMySQL
模块使用 数据库连接对象.cursor()
方法获取游标对象。
import pymysql
db_connect = pymysql.Connect(host="localhost", port=3306, user="root", password="123123123", database="cms", charset="utf8")
cursor = db_connect.cursor()
print(cursor)
cursor.close()
db_connect.close()
执行 SQL 操作
PyMySQL
模块使用 execute()
方法执行 SQL 语句,实现数据库操作。
游标对象.execute(query, args=None)
query
:需要执行的 SQL 语句args
:为 SQL 语句中的占位符提供参数,防止 SQL 注入的发生
import pymysql
db_connect = pymysql.Connect(host="localhost", port=3306, user="root", password="123123123", database="cms", charset="utf8")
cursor = db_connect.cursor()
cursor.execute("select * from class")
cursor.close()
db_connect.close()
查询操作
查询单条记录
使用 execute
执行完毕 SQL 语句后, 可以使用 游标对象.fetchone()
方法获取一条查询结果。
fetchone()
方法可重复使用,程序会继续向后读取查询结果。如果无查询结果可读取,则返回 None
。
import pymysql
db_connect = pymysql.Connect(host="localhost", port=3306, user="root", password="123123123", database="cms", charset="utf8")
cursor = db_connect.cursor()
cursor.execute("select * from class")
result = cursor.fetchone()
print(result)
result = cursor.fetchone()
print(result)
cursor.close()
db_connect.close()
查询多条记录
可以使用 游标对象.fetchall()
方法获取全部查询结果。
import pymysql
db_connect = pymysql.Connect(host="localhost", port=3306, user="root", password="123123123", database="cms", charset="utf8")
cursor = db_connect.cursor()
cursor.execute("select * from class")
result = cursor.fetchall()
print(result)
cursor.close()
db_connect.close()
查询指定条数记录
可以使用 游标对象.fetchmany(size)
方法获取指定数量查询结果。
import pymysql
db_connect = pymysql.Connect(host="localhost", port=3306, user="root", password="123123123", database="cms", charset="utf8")
cursor = db_connect.cursor()
cursor.execute("select * from class")
result = cursor.fetchmany(5)
print(result)
cursor.close()
db_connect.close()
插入操作
执行插入操作同样使用 execute()
方法,插入数据时的 SQL 语句中的新数据,可以使用传参的方式填 入。
参数可以使用 元组
或 列表
形式传入。
在插入数据操作完成后,需要对所做的更改操作进行提交。
提交操作使用 数据库连接对象.commit()
方法。
import pymysql
db_connect = pymysql.Connect(host="localhost", port=3306, user="root", password="123123123", database="cms", charset="utf8")
cursor = db_connect.cursor()
insert_sql = ''' insert into class(name,sort,type) values(%s, %s, %s) '''
values = ("创业宝典", 9, 0)
result = cursor.execute(insert_sql,values)
print(result)
db_connect.commit()
cursor.close()
db_connect.close()
更新操作
更新操作同插入操作,只是 SQL 语句不同,操作完毕后,需要执行提交操作。
import pymysql
db_connect = pymysql.Connect(host="localhost", port=3306, user="root", password="123123123", database="cms", charset="utf8")
cursor = db_connect.cursor()
insert_sql = ''' update class set name=%s,sort=%s where id=%s'''
values = ("创业成功宝典", 99, 10)
result = cursor.execute(insert_sql,values)
print(result)
cursor.close()
db_connect.commit()
db_connect.close()
删除操作
删除操作同插入操作和更新操作,只是 SQL 语句不同,操作完毕后,需要执行提交操作。
import pymysql
db_connect = pymysql.Connect(host="localhost", port=3306, user="root", password="123123123", database="cms", charset="utf8")
cursor = db_connect.cursor()
insert_sql = ''' delete from class where id=%s'''
values = (10,)
result = cursor.execute(insert_sql,values)
print(result)
cursor.close()
db_connect.commit()
db_connect.close()