1、概述
首先要操作MySql数据库之前,我们需要做两件事:
- (1)、安装MySql数据库程序
- (2)、安装MySql数据库与Python的连接器程序(Mysql-connector-python)
安装MySql数据库程序,本例程使用的是MySql5.7社区版,可以上官网下载安装最新版官网下载地址。
在Windows10下安装Mysql-connector-python,打开PyCharm编译器下的Terminal命令窗口输入如下命令:
pip install mysql-connector-python -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
这段命令后半部分的解释:-i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com,采用国内阿里镜像下载,如果不加很有可能会下载失败,提示连接超时。
MySql数据和Mysql-connector-python数据库连接器安装好之后,我们才可以在PyCharm编译器中导入mysql.connector模块。
import mysql.connector
2、案例
案例的书写流程,如下:
- 创建数据库连接
- 获取数据库操作游标
- 创建数据库
- 创建数据表
- 增、删、改、查操作
案例如下:
import mysql.connector
# 数据库名
databaseName = "people"
# 获取Mysql驱动连接对象
conn = mysql.connector.connect(user='root', password='111111', host='localhost')
print(conn)
# 获取一个操作数据的游标
cur = conn.cursor()
# 判断数据库people是否已经存在的标记
isExistDatabase = False
# 检查pytest数据库是否存在,如果存在则True
cur.execute("SHOW DATABASES")
for x in cur:
# x 是一个元组 ,[0]为数据库名称
if x[0] == databaseName:
isExistDatabase = True
# 如果数据库不存在,则创建数据库
if not isExistDatabase:
cur.execute("CREATE DATABASE " + databaseName)
print("创建数据库" + databaseName + "成功")
# 函数-在指定数据库下创建数据表
def ceateTable(cursor, database):
# 选择 people 这个数据库
cursor.execute("use " + database)
# sql中的内容为创建一个名为user的表
sql = """CREATE TABLE IF NOT EXISTS `user` (
`id` VARCHAR (40) PRIMARY KEY,
`name` VARCHAR (255),
`age` INT DEFAULT 1
)"""
# 如果存在user这个表则删除
cursor.execute("drop table if exists user")
# 创建表
cursor.execute(sql)
print("数据表user创建成功")
# 函数-在user表插入一条数据
def insertRecord(cursor, isMuli):
# 开始插入数据
sql = "INSERT INTO user (id,name,age) VALUES (%s,%s,%s)"
# 无论是数字(包括整数和浮点数)、字符串、日期时间或其他任意类型,都应该使用 % s占位符。
if isMuli:
val = [("9528", "小花", 19),
("9529", "小黑", 20),
("9530", "小红", 21)]
cursor.executemany(sql, val)
else:
val = ("9527", "小明", 18)
cursor.execute(sql, val)
# 数据表内容有更新,必须使用到该语句
conn.commit()
print(cursor.rowcount, "条记录插入成功。")
# 函数-查询数据表记录
def selectAll(cursor):
cursor.execute("SELECT * FROM user")
result = cursor.fetchall() # fetchall() 获取所有记录
return result
# 函数-根据Id查询对应的数据表记录
def selectList(cursor, id):
cursor.execute("SELECT * FROM user where id=" + id)
result = cursor.fetchall() # fetchall() 获取所有记录
return result
# 函数-根据Id删除对应的数据表记录
def delById(cursor, id):
sql = "DELETE FROM user WHERE id = %s"
val = (id,) # 此处逗号一定不能省
cursor.execute(sql, val)
conn.commit()
print(cursor.rowcount, " 条记录被删除")
# 函数-根据Id修改对应的数据表记录
def updateById(cursor, id, name):
sql = "UPDATE user SET name = '" + name + "' WHERE id = '" + id + "'"
cursor.execute(sql)
conn.commit()
print(cursor.rowcount, " 条记录被修改")
print("***********创建数据表***********")
# 创建数据表函数
ceateTable(cur, databaseName)
print("***********插入一条数据***********")
# 向数据表插入一条数据
insertRecord(cur, False)
print("***********插入多条数据***********")
# 向数据表插入多条数据
insertRecord(cur, True)
print("***********查询所有记录***********")
users = selectAll(cur)
for u in users:
print("id=" + u[0] + ",name=" + u[1] + ",age=" + str(u[2]))
print("***********根据ID查询记录***********")
users = selectList(cur, "9527")
for u in users:
print("id=" + u[0] + ",name=" + u[1] + ",age=" + str(u[2]))
print("***********根据ID删除记录***********")
delById(cur, "9527")
print("***********根据ID修改记录***********")
updateById(cur, "9528", "小灰")
print("***********再次查询所有记录***********")
users = selectAll(cur)
for u in users:
print("id=" + u[0] + ",name=" + u[1] + ",age=" + str(u[2]))
# 关闭游标
cur.close()
输出结果:
<mysql.connector.connection_cext.CMySQLConnection object at 0x00000226F1ADB128>
创建数据库people成功
***********创建数据表***********
数据表user创建成功
***********插入一条数据***********
1 条记录插入成功。
***********插入多条数据***********
3 条记录插入成功。
***********查询所有记录***********
id=9527,name=小明,age=18
id=9528,name=小花,age=19
id=9529,name=小黑,age=20
id=9530,name=小红,age=21
***********根据ID查询记录***********
id=9527,name=小明,age=18
***********根据ID删除记录***********
1 条记录被删除
***********根据ID修改记录***********
1 条记录被修改
***********再次查询所有记录***********
id=9528,name=小灰,age=19
id=9529,name=小黑,age=20
id=9530,name=小红,age=21
例子并不复杂,本文就不再单独提出某个函数的具体解释了,代码中的注释已经写得非常清晰,读者可以尝试运行代码直接观察会更加直观。
3、总结
在实际开发过程中对数据库的操作使用非常频繁,我们至少需要掌握最基本的增删改查。
在案例中反复用到了cursor.execute()这个函数,这个函数可以直接执行我们的sql语句,使用非常方便。
执行多条记录插入数据表的时候,可以使用cursor.executemany()这个函数。
数据表内容有更新,必须使用该语句conn.commit()。
数据查询返回的结果是一个元组列表。