一、pymysql库
要使用Python操作MySQL数据库,可以使用PyMySQL库。PyMySQL是一个纯Python编写的MySQL客户端库,可以在Python程序中进行MySQL数据库的连接、查询、插入等操作。
与之相似的还有mysql官方提供的MySQL Connector/Python也可以实现类似功能。它们的区别主要在以下方面:
- pymysql库是一个纯Python实现的库,可以直接使用pip安装。
- MySQL Connector/Python是MySQL官方提供的Python驱动程序,是使用C编写的,提供了更高的性能和更多的功能选项。
在本文中使用pymysql进行操作
使用前需要先安装pymysql:
pip install pymysql
二、数据库连接
python对数据库进行操作前需要使用pymysql库中的connect函数连接到对应的数据库
import pymysql
# 连接到MySQL数据库
db = pymysql.connect(
host='localhost', # 数据库地址
port=3306, # 端口号,默认为3306
user='root', # 用户名
password='password', # 密码
database='testdb' # 数据库名称
)
三、游标对象
在连接到数据库以后,我们还需要一个游标对象用于执行SQL语句来 控制数据库。
创建游标对象:
cusor = db.cusor()
可以使用游标对象的以下函数进行数据库操作:
-
execute(sql, params=None): 执行SQL语句。可以通过参数传递SQL语句以及需要绑定的参数。返回值为受影响的行数。
-
executemany(sql, seq_of_params): 批量执行SQL语句。可以通过参数传递SQL语句以及需要绑定的参数序列。返回值为受影响的行数。
-
fetchone(): 获取查询结果的下一行。返回值为一个元组,包含查询结果的一行数据。
-
fetchmany(size=None): 获取查询结果的多行。可以通过参数指定获取的行数,默认为游标的arraysize属性。返回值为一个包含多行数据的列表。
-
fetchall(): 获取查询结果的所有行。返回值为一个包含所有行数据的列表。
-
scroll(value, mode=‘relative’): 在查询结果中移动游标的位置。可以通过参数指定移动的行数以及移动的方式。mode参数可以是’relative’(相对移动),‘absolute’(绝对移动)或’first’(移到第一行)。
-
close(): 关闭游标。关闭之后,游标对象将不再可用。
-
rowcount: 返回最近一次execute()方法执行后受影响的行数。
-
description: 返回查询结果的元数据,包含查询结果的列名、数据类型等信息。
四、创建数据库表
mport pymysql
# 连接数据库
conn = pymysql.connect(
host='localhost', # 数据库地址
user='root', # 数据库用户名
password='password', # 数据库密码
db='test_db' # 数据库名称
)
# 创建游标对象
cursor = conn.cursor()
# 创建表的SQL语句
create_table_sql = '''
CREATE TABLE IF NOT EXISTS students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT
)
'''
# 执行SQL语句
cursor.execute(create_table_sql)
# 提交事务
conn.commit()
# 关闭游标和连接
cursor.close()
conn.close()
五、增删查改
import pymysql
# 创建数据库连接
conn = pymysql.connect(host='localhost', user='root', password='password', database='testdb')
# 创建游标对象
cursor = conn.cursor()
# 执行SQL语句,创建表
create_table_sql = '''
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT
)
'''
cursor.execute(create_table_sql)
# 插入数据insert_sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
cursor.execute(insert_sql, ('Alice', 25))
cursor.execute(insert_sql, ('Bob', 30))
conn.commit()
# 查询数据
select_sql = "SELECT * FROM users"
cursor.execute(select_sqlresults =.fetchall()
for row in results:
print(row)
# 更新数据
update_sql = "UPDATE users SET age = %s WHERE name = %s"
cursor.execute(update_sql, (26, 'Alice'))
conn.commit()
# 删除数据
delete_sql = "DELETE FROM users WHERE name = %s"
cursor.execute(delete_sql, 'Bob')
conn.commit()
# 关闭游标和数据库连接
cursor.close()
conn.close()