PyMySQL
是一个纯 Python 实现的 MySQL 客户端库,它允许你通过 Python 脚本连接到 MySQL 数据库并执行 SQL 查询。
相比于其他数据库驱动程序,PyMySQL
的主要优点是它不需要安装额外的系统依赖项,并且完全用 Python 编写。
首先,你需要安装 PyMySQL
包。可以通过 pip 来安装:
bashpip install pymysql
以下展示了如何使用 PyMySQL
进行基本的数据库操作,如连接到数据库、执行查询、插入数据等。
要连接到 MySQL 数据库,可以使用 pymysql.connect()
方法:
pythonimport pymysql
# 创建数据库连接
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor # 返回结果为字典形式
)
try:
with connection.cursor() as cursor:
# 执行 SQL 查询
sql = "SELECT DATABASE();"
cursor.execute(sql)
result = cursor.fetchone()
print(f"当前数据库: {result}")
finally:
# 关闭数据库连接
connection.close()
你可以通过执行 SQL 语句来创建表:
pythonimport pymysql
# 创建数据库连接
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
try:
with connection.cursor() as cursor:
# 创建表
sql = '''
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
age INT NOT NULL
);
'''
cursor.execute(sql)
# 提交更改
connection.commit()
finally:
# 关闭数据库连接
connection.close()
使用 INSERT INTO
语句将数据插入到表中:
pythonimport pymysql
# 创建数据库连接
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
try:
with connection.cursor() as cursor:
# 插入数据
sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
cursor.execute(sql, ('Alice', 30))
# 提交更改
connection.commit()
finally:
# 关闭数据库连接
connection.close()
使用 SELECT
语句从表中检索数据:
pythonimport pymysql
# 创建数据库连接
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
try:
with connection.cursor() as cursor:
# 查询数据
sql = "SELECT id, name, age FROM users"
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
print(f"ID: {row['id']}, Name: {row['name']}, Age: {row['age']}")
finally:
# 关闭数据库连接
connection.close()
使用 UPDATE
语句更新表中的数据:
pythonimport pymysql
# 创建数据库连接
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
try:
with connection.cursor() as cursor:
# 更新数据
sql = "UPDATE users SET age = %s WHERE name = %s"
cursor.execute(sql, (31, 'Alice'))
# 提交更改
connection.commit()
finally:
# 关闭数据库连接
connection.close()
使用 DELETE
语句删除表中的数据:
pythonimport pymysql
# 创建数据库连接
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
try:
with connection.cursor() as cursor:
# 删除数据
sql = "DELETE FROM users WHERE name = %s"
cursor.execute(sql, ('Alice',))
# 提交更改
connection.commit()
finally:
# 关闭数据库连接
connection.close()
为了确保资源被正确释放,你可以使用上下文管理器来处理数据库连接:
pythonimport pymysql
with pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
) as connection:
with connection.cursor() as cursor:
# 执行 SQL 查询
sql = "SELECT DATABASE();"
cursor.execute(sql)
result = cursor.fetchone()
print(f"当前数据库: {result}")
在实际应用中,数据库操作可能会失败,因此需要进行适当的错误处理:
pythonimport pymysql
try:
# 创建数据库连接
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
with connection.cursor() as cursor:
# 执行 SQL 查询
sql = "SELECT * FROM non_existent_table"
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
print(row)
except pymysql.MySQLError as e:
print(f"MySQL 错误: {e}")
except Exception as e:
print(f"其他错误: {e}")
finally:
# 确保连接被关闭
if 'connection' in locals():
connection.close()
新建一个文件mysqlclient.py用来配置mysql配置
#!/usr/bin/env python # -*- coding: UTF-8 -*- import pymysql conn = pymysql.connect( host="127.0.0.1", port=3306, user="用户", password="密码", db="data" )
在使用的py文件引入mysqlclient,并使用
#!/usr/bin/env python # -*- coding: UTF-8 -*- from mysql.mysqlclient import conn cur = conn.cursor() #查询操作(不需要try except) def select_mysql(username, password): sql = "SELECT * FROM app01_userinfo WHERE name ='%s' and password ='%s'" % (username, password) cur.execute(sql) result = cur.fetchall() if (len(result) == 0): return False#不存在 else: return result#存在 #插入操作 def insert_mysql(username, password,isadmin): sql = "INSERT INTO app01_userinfo(name, password,isadmin) VALUES ('%s','%s','%s')" %(username, password, isadmin) try: addflag = cur.execute(sql) conn.commit()# 对数据库内容有改变,需要commit() if (addflag == 1): return 1 #注册成功 else: return 0 #注册失败 except: print("系统错误...注册失败!") return 0 #更新操作 def updata_mysql(username,oldpassword,newpassword): sql2 = "update app01_userinfo set name='%s',password='%s' where password='%s'"%(username, newpassword, oldpassword) try: resetflag = cur.execute(sql2) conn.commit() if (resetflag == 1): return 1 else: return 0 except: print("系统错误...修改密码失败!") return 0 #删除操作 def del_mysql(username, password): sql = "Delete FROM app01_userinfo WHERE name ='%s' and password ='%s'" % (username, password) try: addflag = cur.execute(sql) conn.commit() if (addflag == 1): return 1 else: return 0 except: print("系统错误...添加密码失败!") return 0