pymysql模块,python与MySQL之间的交互

1. 简介

PyMySQL是Python编程语言中用于连接MySQL数据库的模块,它实现了Python DB API 2.0规范,并包含了 pure-Python MySQL 客户端库。PyMySQL使用纯Python编写,可以在Python的各种实现环境中运行,包括CPython、PyPy、IronPython、Jython等,这使得PyMySQL是使用 Python 进行 MySQL 数据库应用开发的一个非常好的选择。

PyMySQL模块中有许多有用的函数,比如:connect(),cursor(),executemany()等。

2. PyMySQL模块的安装

PyMySQL可以使用pip安装,使用pip安装很方便,只需要在命令行中输入:

pip install pymysql

如果想要卸载,可以使用:

pip uninstall pymysql

3. 连接MySQL数据库

在使用PyMySQL模块连接MySQL数据库之前,需要为MySQL数据库创建一个用户,并授予该用户访问数据库的权限。在连接MySQL之前,要先确定好主机名、数据库名、用户名、密码和端口号等参数,同时还需要指定编码方式,一般选择UTF-8。创建好相应的用户和权限后,就可以使用以下代码连接到MySQL数据库:

import pymysql

# 打开数据库连接

db = pymysql.connect(host="localhost", user="root", password="root", database="test", port=3306, charset='utf8')

# 使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

# 使用 execute() 方法执行 SQL 查询

cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取单条数据.

data = cursor.fetchone()

print("Database version : %s " % data)

# 关闭数据库连接

db.close()

注意:在使用PyMySQL之前,需要先导入pymysql模块。

代码中,mysql的host是指主机名,user是用户名,password是密码,database是数据库名,port是端口号,charset是指编码方式。

在连接成功之后,可以使用cursor()方法创建一个游标对象,该对象用于执行mysql语句。

在此处,我们使用execute()方法执行一个SQL查询语句,使用fetchone()方法从游标对象中获取一条查询结果。

4. 创建表格

使用PyMySQL模块创建一个名为employee的表格,该表格包含4个字段,分别是id、name、age、sex:

import pymysql

# 打开数据库连接

db = pymysql.connect(host="localhost", user="root", password="root", database="test", port=3306, charset='utf8')

# 使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

# 使用 execute() 方法执行 SQL,如果表已经存在则删除

cursor.execute("DROP TABLE IF EXISTS employee")

# 创建表格

sql = """CREATE TABLE employee (

id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,

name CHAR(20) NOT NULL,

age INT,

sex CHAR(1))"""

cursor.execute(sql)

# 关闭数据库连接

db.close()

注意:在创建表格和插入数据时,要尽可能的避免直接将数据拼接到SQL语句中,这样可能会导致SQL注入等问题。可以使用参数来代替数据,从而避免这些问题。

5. 插入数据

使用以下代码向employee表格中插入数据:

import pymysql

# 打开数据库连接

db = pymysql.connect(host="localhost", user="root", password="root", database="test", port=3306, charset='utf8')

# 使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

# 插入数据

sql = "INSERT INTO employee(name, age, sex) VALUES (%s, %s, %s)"

val = ('Tom', 25, 'M')

cursor.execute(sql, val)

# 提交到数据库执行

db.commit()

# 关闭数据库连接

db.close()

代码中,使用execute()方法执行一条insert语句来插入数据。

数据库操作完成后,需要使用commit()方法提交更改才能生效,如果不调用commit()方法,程序虽然不会抛出错误,但数据实际上并不会被插入到数据库中。

6. 查询数据

可以使用SELECT语句来查询数据库中的数据。以下代码查询employee表格中的所有数据:

import pymysql

# 打开数据库连接

db = pymysql.connect(host="localhost", user="root", password="root", database="test", port=3306, charset='utf8')

# 使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

# 查询数据

sql = "SELECT * FROM employee"

cursor.execute(sql)

# 获取所有记录列表

results = cursor.fetchall()

for row in results:

id = row[0]

name = row[1]

age = row[2]

sex = row[3]

print("id=%d,name=%s,age=%d,sex=%s" % (id, name, age, sex))

# 关闭数据库连接

db.close()

代码中,使用execute()方法执行一条SELECT查询语句,然后使用fetchall()方法从游标对象中获取所有的查询结果。然后,使用for循环逐个遍历查询结果,并将结果打印到控制台上。

7. 更新数据

可以使用UPDATE语句来更新数据库中的数据。以下代码将名字为Tom的员工的年龄更新为35岁:

import pymysql

# 打开数据库连接

db = pymysql.connect(host="localhost", user="root", password="root", database="test", port=3306, charset='utf8')

# 使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

# 更新数据

sql = "UPDATE employee SET age = %s WHERE name = %s"

val = (35, 'Tom')

cursor.execute(sql, val)

# 提交到数据库执行

db.commit()

# 关闭数据库连接

db.close()

代码中,使用execute()方法执行一条UPDATE语句来更新数据,并将结果提交到数据库中。

8. 删除数据

可以使用DELETE语句来删除数据库中的数据。以下代码将名字为Tom的员工从employee表格中删除:

import pymysql

# 打开数据库连接

db = pymysql.connect(host="localhost", user="root", password="root", database="test", port=3306, charset='utf8')

# 使用cursor()方法创建一个游标对象cursor

cursor = db.cursor()

# 删除数据

sql = "DELETE FROM employee WHERE name = '%s'" % ('Tom')

cursor.execute(sql)

# 提交修改

db.commit()

# 关闭连接

db.close()

代码中,使用execute()方法执行DELETE语句来删除名字为Tom的员工,并提交修改。

9. 总结

PyMySQL是Python编程语言中用于连接MySQL数据库的模块,它可以在Python的各种实现环境中运行,包括Cpython、PyPy、IronPython、Jython等。PyMySQL使用纯Python编写,方便使用者进行安装。

本文按照连接MySQL、创建表格、插入数据、查询数据、更新数据和删除数据的顺序,对PyMySQL模块的使用进行了介绍。在其中,需要注意的是,使用PyMySQL时要避免直接将数据拼接到SQL语句中,这样可能会导致SQL注入等问题,应尽量使用参数来代替数据。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签