
        大家好,当涉及到与数据库进行交互和操作时,Python的pymysql库是一个常用且功能强大的选择。pymysql提供了与MySQL数据库的连接、查询、插入、更新和删除等操作的方法,使得在Python中进行数据库操作变得简单而高效。
1、安装 pymysql 库
 
在开始之前,确保已经安装了 pymysql 库。可以使用以下命令通过 pip 进行安装:
pip install pymysql2、连接数据库
        首先,我们需要建立与数据库的连接。使用 pymysql 的 connect() 函数来创建一个数据库连接对象,该函数接受数据库的连接参数,例如主机名、用户名、密码、数据库名等。以下是一个建立与 MySQL 数据库的连接的示例:
import pymysql
# 建立数据库连接
connection = pymysql.connect(
    host='localhost',
    user='username',
    password='password',
    database='database_name'
)        在上述示例中,我们通过传递数据库的连接参数来建立与数据库的连接。根据实际情况,您需要将 host、user、password 和 database 替换为相应的值。
3、创建游标对象
在建立数据库连接后,我们需要创建一个游标对象来执行 SQL 语句和操作数据库。游标对象允许我们执行查询、插入、更新或删除等数据库操作。
# 创建游标对象
cursor = connection.cursor()4、执行 SQL 查询
        使用游标对象,我们可以执行 SQL 查询并获取结果。pymysql 提供了多个方法来执行查询,其中最常用的是 execute() 和 fetchone()、fetchall() 方法。
- execute()方法用于执行 SQL 查询,可以接受带有占位符的参数。
- fetchone()方法用于获取查询结果的下一行数据。
- fetchall()方法用于获取查询结果的所有行数据。
以下是一个执行查询并获取结果的示例:
# 执行查询
cursor.execute('SELECT * FROM table_name')
# 获取查询结果的所有行数据
rows = cursor.fetchall()
# 遍历结果
for row in rows:
    print(row)        在上述示例中,我们执行了一个简单的查询语句,并使用 fetchall() 方法获取查询结果的所有行数据。然后,我们遍历每一行数据并将其打印出来。
5、执行 SQL 插入、更新和删除操作
        除了执行查询,pymysql 也支持执行插入、更新和删除等操作。使用 execute() 方法执行这些操作,可以将相应的 SQL 语句作为参数传递给它。
(1)插入操作
# 执行插入操作
cursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", ('value1', 'value2'))
# 提交事务
connection.commit()(2)更新操作
# 执行更新操作
cursor.execute("UPDATE table_name SET column1 = %s WHERE column2 = %s", ('new_value', 'condition'))
# 提交事务
connection.commit()(3)删除操作
# 执行删除操作
cursor.execute("DELETE FROM table_name WHERE column1 = %s", ('condition',))
# 提交事务
connection.commit()        在上述示例中,我们使用 execute() 方法执行了插入、更新和删除操作,并使用参数占位符 %s 来传递值。最后,我们通过 connection.commit() 提交事务。
6、关闭连接
在完成数据库操作后,不要忘记关闭数据库连接,以释放资源。
# 关闭游标对象
cursor.close()
# 关闭数据库连接
connection.close()在上述示例中,我们使用 close() 方法关闭了游标对象和数据库连接。
7、完整实例
以下是一个完整的例子,展示了如何连接到MySQL数据库、创建表、插入数据、执行查询并获取结果:
import pymysql
# 建立数据库连接
connection = pymysql.connect(
    host='localhost',
    user='username',
    password='password',
    database='database_name'
)
try:
    # 创建游标对象
    cursor = connection.cursor()
    # 创建表
    create_table_query = '''
    CREATE TABLE IF NOT EXISTS employees (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(100),
        age INT,
        department VARCHAR(100)
    )
    '''
    cursor.execute(create_table_query)
    # 插入数据
    insert_query = "INSERT INTO employees (name, age, department) VALUES (%s, %s, %s)"
    employees_data = [
        ('John Doe', 30, 'IT'),
        ('Jane Smith', 35, 'HR'),
        ('Mark Johnson', 28, 'Sales')
    ]
    cursor.executemany(insert_query, employees_data)
    # 提交事务
    connection.commit()
    # 执行查询
    select_query = "SELECT * FROM employees"
    cursor.execute(select_query)
    # 获取查询结果的所有行数据
    rows = cursor.fetchall()
    # 打印查询结果
    for row in rows:
        print(row)
finally:
    # 关闭游标对象和数据库连接
    cursor.close()
    connection.close()在上述示例中,我们首先建立了与MySQL数据库的连接,然后使用游标对象执行以下操作:
-  创建表:我们使用 CREATE TABLE语句创建了一个名为employees的表,具有id、name、age和department等列。
-  插入数据:我们使用 executemany()方法批量插入了几条员工数据。
-  提交事务:使用 connection.commit()提交所有的插入操作,将数据持久化到数据库。
-  执行查询:我们执行了一个简单的 SELECT查询语句,并使用fetchall()方法获取查询结果的所有行数据。
-  打印查询结果:我们遍历查询结果,并将每一行数据打印出来。 
-  最后,关闭了游标对象和数据库连接,释放了资源。 
8、连接池
        使用pymysql的ConnectionPool()函数创建一个数据库连接池对象。该函数接受连接参数,例如主机名、用户名、密码、数据库名等,以及一些连接池相关的参数,例如最大连接数、最小空闲连接数等。
以下是创建连接池的示例:
# 创建连接池
connection_pool = pymysql.cursors.ConnectionPool(
    host='localhost',
    user='username',
    password='password',
    database='database_name',
    autocommit=True,
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor,
    maxconnections=10,
    mincached=5
)        在上述示例中,我们使用了一些常用的连接池参数,如maxconnections表示最大连接数,mincached表示最小空闲连接数。可以根据实际需求调整这些参数。
        使用连接池对象的connection()方法从连接池中获取一个数据库连接。这样,每次需要连接时,可以直接从连接池中获取,而不需要手动创建连接。
# 从连接池获取连接
connection = connection_pool.get_connection()现在,可以使用connection对象执行数据库操作。例如执行查询、插入、更新和删除等。
# 创建游标对象
cursor = connection.cursor()
# 执行查询
cursor.execute("SELECT * FROM table_name")
# 获取查询结果的所有行数据
rows = cursor.fetchall()
# 打印查询结果
for row in rows:
    print(row)
# 关闭游标对象
cursor.close()
# 将连接返回给连接池
connection_pool.release(connection)在上述示例中,使用连接对象的cursor()方法创建游标对象,并执行了一个查询操作。最后,我们关闭了游标对象,并使用连接池的release()方法将连接返回给连接池。
在程序结束时,确保关闭连接池,以释放资源。
# 关闭连接池
connection_pool.close()以下是一个完整的pymysql连接池的示例:
import pymysql.cursors
# 创建连接池
connection_pool = pymysql.cursors.ConnectionPool(
    host='localhost',
    user='username',
    password='password',
    database='database_name',
    autocommit=True,
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor,
    maxconnections=10,
    mincached=5
)
try:
    # 从连接池获取连接
    connection = connection_pool.get_connection()
    # 创建游标对象
    cursor = connection.cursor()
    # 执行查询
    cursor.execute("SELECT * FROM table_name")
    # 获取查询结果的所有行数据
    rows = cursor.fetchall()
    # 打印查询结果
    for row in rows:
        print(row)
    # 关闭游标对象
    cursor.close()
    # 将连接返回给连接池
    connection_pool.release(connection)
finally:
    # 关闭连接池
    connection_pool.close()在上述示例中,首先创建了一个pymysql连接池对象,设置了连接池的参数,如最大连接数和最小空闲连接数。
然后,在try-finally块中执行以下操作:
-  从连接池获取连接: 使用连接池对象的 get_connection()方法从连接池中获取一个数据库连接。
-  执行查询: 使用获取的连接对象创建游标对象,并执行查询操作。 
-  获取查询结果: 使用游标对象的 fetchall()方法获取查询结果的所有行数据。
-  打印查询结果: 遍历查询结果,并将每一行数据打印出来。 
-  关闭游标对象: 使用游标对象的 close()方法关闭游标对象。
-  将连接返回给连接池: 使用连接池对象的 release()方法将连接返回给连接池,以便重复使用。
最后,在finally块中,关闭了连接池,确保在程序结束时释放资源。



















