python对mysql的操作二

本文介绍了使用Python操作MySQL数据库的方法,包括游标的使用、连接池的概念及其优势,以及如何进行合理的表结构设计。
部署运行你感兴趣的模型镜像

1)游标

# 游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制
# 游标总是与一条SQL 选择语句相关联因为游标由结果集
# (可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成
import MySQLdb
def connect_mysql():
    db_config = {
        "host":"localhost",
        "user":"root",
        "passwd":"root",
        "db":"python_db",
        "charset":"utf8"
    }
    cnx = MySQLdb.connect(**db_config)
    return cnx
if __name__ == '__main__':
    cnx = connect_mysql()
    cus = cnx.cursor()  # 创建游标对象
    sql  = '''select * from test;'''
    try:
        cus.execute(sql)
        result1 = cus.fetchone()  #在结果中取一条数据
        print('result1:')
        print(result1)
        result2 = cus.fetchmany(1)  #在接下来的结果中取一条数据,数字可定义
        print('result2:')
        print(result2)
        result3 = cus.fetchall()  #在接下来的结果中取出所有数据
        print('result3:')
        print(result3)
        cus.close()
        cnx.commit()
    except Exception as e:
        cnx.rollback()
        print('error:')
        raise e
    finally:
        cnx.close()
# 常用方法:
# cursor():创建游标对象
# close():关闭此游标对象
# fetchone():得到结果集的下一行
# fetchmany([size = cursor.arraysize]):得到结果集的下几行
# fetchall():得到结果集中剩下的所有行
# excute(sql[, args]):执行一个数据库查询或命令
# executemany (sql, args):执行多个数据库查询或命令
运行结果:
result1:
(100L,)
result2:
((2L,),)
result3:
((5L,), (8L,), (11L,))


2)连接池

DBUtils提供两种外部接口:
* PersistentDB :提供线程专用的数据库连接,并自动管理连接。
* PooledDB :提供线程间可共享的数据库连接,并自动管理连接。
import MySQLdb
from DBUtils.PooledDB import PooledDB

db_config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "passwd": "root",
    "db": "python_db",
    "charset": "utf8"
}
pool = PooledDB(MySQLdb, 5, **db_config)  # 5为连接池里的最少连接数
conn = pool.connection()  # 以后每次需要数据库连接就是用connection()函数获取连接就好了
cur = conn.cursor()
SQL = "select * from tmp;"
r = cur.execute(SQL)
r = cur.fetchall()
print(r)
cur.close()
conn.close()


PooledDB的参数:
1. mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接
2. maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接
3. maxconnections,最大的连接数,
4. blocking,当连接数达到最大的连接数时,在请求连接的时候,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数,如果这个值是False,会报错,
5. maxshared 当连接数达到这个数,新请求的连接会分享已经分配出去的连接
连接池对性能的提升表现在:
1.在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度
2.关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁地打开和关闭连接

3)表结构设计

在操作设计数据库之前,我们先要设计数据库表结构,先要分析各个主体他们之间有什么属性,并确定表结构,在实际开发过程中,根据自己的业务需要和属性,设计不同的表结构

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,用户现在想了解如何使用Python操作MySQL,特别是结合MySQL Workbench的使用方法。首先,我需要整理用户提供的历史对话和引用内容,确保回答准确且符合用户需求。 用户之前的问题是关于MySQL 8.4和Workbench的适配性,但根据官方信息,MySQL 8.4尚未发布,所以之前的回答主要集中在版本兼容性和安装问题上。现在用户转向Python操作MySQL,可能需要连接数据库的具体步骤,以及如何结合Workbench进行管理。 首先,用户提供的引用中有几个关键点: 1. 引用[2]展示了Python连接MySQL的示例代码,使用了MySQLdb库。 2. 引用[3]和[4]提到了Workbench的安装路径和基本操作,比如创建数据库和表。 3. 引用[1]强调了Workbench作为图形界面工具的优势,方便用户进行数据库管理。 用户的需求可能包括: - Python连接MySQL的具体步骤,包括代码示例。 - 如何配置MySQL Workbench以配合Python使用。 - 常见问题的解决方法,比如依赖安装、连接错误处理。 需要注意的是,用户可能对Python库的选择有疑问,比如是否使用MySQLdb还是其他库如PyMySQL。此外,用户可能希望了解如何通过Workbench创建数据库和表,然后在Python操作这些数据。 在之前的回答中,已经提到了版本兼容性和依赖问题,这里需要确保Python库与MySQL服务器版本兼容。例如,MySQLdb主要支持Python 2.x,而PyMySQL更适合Python 3.x,这可能是一个需要注意的点。 另外,用户可能对连接过程中的参数设置(如主机名、端口、字符集)不太清楚,需要详细说明。同,引用[2]中的代码示例使用了charset='utf8',这可能涉及到编码问题,需要提醒用户确保数据库和表的字符集一致,避免乱码。 还需要考虑安全性问题,比如密码管理,避免在代码中硬编码密码,建议使用环境变量或配置文件。此外,事务管理和错误处理(如try-except块)也是Python操作数据库的关键点,应该在教程中提及。 关于Workbench的使用,用户可能需要知道如何通过图形界面创建数据库和表,导出SQL脚本,以及如何查看和管理数据。这些步骤可以结合引用[1]和[4]中的内容进行说明,比如创建数据库、设计表结构、执行查询等。 最后,用户可能遇到安装问题,比如Python库的安装失败,或者Workbench连接数据库的配置错误。需要提供常见问题的解决方法,例如安装mysql-connector-python库,检查MySQL服务是否运行,防火墙设置等。 总结回答结构: 1. Python连接MySQL的步骤,包括库的选择和代码示例。 2. MySQL Workbench的配置和使用方法,辅助数据库管理。 3. 完整示例:从创建数据库到Python操作数据。 4. 常见问题及解决方法,确保用户顺利操作。 5. 安全性和最佳实践建议,如密码管理和错误处理。 需要确保语言简洁,步骤清晰,代码示例正确,并且引用相关的引用内容,如引用[2]的代码示例和引用[3]的安装路径。同,提醒用户注意版本兼容性和系统依赖,如Python 3推荐使用PyMySQLmysql-connector-python。</think>--- ### Python操作MySQL完整指南(Workbench辅助) --- #### 一、Python连接MySQL的核心步骤 1. **安装Python驱动库** - **推荐库**:根据Python版本选择: - Python 3.x:`mysql-connector-python`(官方推荐)或`PyMySQL` - Python 2.x:`MySQLdb`(如引用[2]示例) ```bash # 安装最新驱动(Python 3) pip install mysql-connector-python ``` 2. **基础连接代码** ```python import mysql.connector # 配置连接参数(与Workbench设置一致) config = { 'user': 'root', 'password': 'your_password', 'host': 'localhost', 'database': 'test_db', 'port': 3306, 'charset': 'utf8mb4' # 推荐字符集(覆盖引用[2]的utf8) } # 建立连接 try: conn = mysql.connector.connect(**config) cursor = conn.cursor() print("连接成功!") except mysql.connector.Error as err: print(f"连接失败: {err}") ``` --- #### MySQL Workbench辅助配置 1. **创建数据库与用户(Workbench操作)** - **步骤**:参考引用[1][4] 1. 打开Workbench → 点击`+`新建连接(参数与Python代码一致) 2. 右键空白区域 → `Create Schema` → 输入数据库名(如`test_db`) 3. 导航栏选择`Users and Privileges` → 添加用户并授权(确保Python代码中的用户有权限) 2. **生成SQL脚本供Python调用** ```sql -- Workbench中设计表后,导出SQL(参考引用[4]) CREATE TABLE `employees` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NOT NULL, PRIMARY KEY (`id`) ); ``` ```python # Python执行SQL文件 with open('schema.sql', 'r') as f: sql_script = f.read() cursor.execute(sql_script, multi=True) # 执行多行语句 conn.commit() # 提交事务 ``` --- #### 三、完整操作示例(增删改查) 1. **插入数据** ```python insert_query = "INSERT INTO employees (name) VALUES (%s)" values = [("Alice",), ("Bob",)] cursor.executemany(insert_query, values) # 批量插入 conn.commit() ``` 2. **查询数据** ```python cursor.execute("SELECT * FROM employees") rows = cursor.fetchall() for row in rows: print(f"ID: {row[0]}, Name: {row[1]}") ``` 3. **更新与删除** ```python # 更新 cursor.execute("UPDATE employees SET name = 'Charlie' WHERE id = 1") # 删除 cursor.execute("DELETE FROM employees WHERE id = 2") conn.commit() ``` --- #### 四、Workbench与Python的协作技巧 1. **可视化调试** - 在Workbench中直接查看表数据变化(引用[1]的查询功能) - 使用`SELECT`语句验证Python操作结果 2. **导出Python代码片段** Workbench支持将SQL操作转换为Python代码(仅限部分版本): - 右键查询结果 → `Export` → `Copy as Python Code` 3. **备份与恢复** ```python # Python调用mysqldump(需配置环境变量) import subprocess subprocess.run(["mysqldump", "-u", "root", "-p", "test_db", ">", "backup.sql"]) ``` --- #### 五、常见问题与解决 | 问题现象 | 解决方案 | |-----------------------------------|--------------------------------------------------------------------------| | `mysql.connector.errors.InterfaceError` | 检查Workbench中MySQL服务是否运行(Windows服务或Linux的`systemctl status mysql`) | | 中文乱码 | 确保Python连接字符集与表定义一致(如`utf8mb4`),参考引用[2]的`charset`参数 | | 连接 | 在Workbench的`Edit Connection` → Advanced中调整`connection_timeout` | --- #### 六、安全建议 1. **密码管理** ```python # 从环境变量读取密码(避免硬编码) import os password = os.environ.get('MYSQL_PASSWORD') ``` 2. **使用SSL加密** 在Workbench连接配置中启用SSL,并在Python代码中添加: ```python config.update({'ssl_ca': '/path/to/ca.pem'}) ``` --- ### 引用说明 - 连接参数配置参考了引用[2]的Python示例 - Workbench操作步骤整合自引用[1][3][4] - 字符集选择优化了引用[2]的`utf8`为更全面的`utf8mb4` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值