python-连接数据库的公用方法

这篇博客详细介绍了如何使用Python实现数据库连接的通用方法,以MySQL为例,包括创建数据库连接、定义数据库连接类、实例化并调用连接方法,最终展示连接成功后的表结构。

1、创建数据库连接方法:以mysql为例,连接成功之后输出特定表结构

# ==============================================================
# -*- coding: utf-8 -*-
# ==============================================================
import json
import pymysql

def conn_mysql(con):
    db = pymysql.connect(con[0], con[1], con[2], con[3])
    cursor = db.cursor()
    sql_dict = input("请输入表名,按回车结束:\n")
    table_sql = "SELECT TABLE_NAME FROM `INFORMATION_SCHEMA`.`TABLES` WHERE table_schema = '"+con[3]+"' and table_name = '"+sql_dict+"'"
    cursor.execute(table_sql)
    table_data = cursor.fetchall()
    table_len = len(table_data)
    if table_len == 0:
        print("输入的表名在指定数据库中不存在,请重新输入表!")
        print("======即将重新开始======="</
### 1. 使用 `conftest.py` 配置全局公共方法 在 `pytest` 中,可以通过 `conftest.py` 文件定义全局可调用的公共方法。这些方法以 `fixture` 的形式定义,并通过 `pytest` 提供的依赖注入机制在测试用例中调用。例如,在项目根目录或测试目录中创建 `conftest.py` 文件,并定义一个 `fixture` 方法: ```python import pytest @pytest.fixture(scope="session") def common_method(): def _method(param): return param * 2 return _method ``` 在测试用例中可以直接调用该方法: ```python def test_common_method(common_method): result = common_method("abc") assert result == "abcabc" ``` 通过这种方式,可以在多个测试文件中复用公共方法,无需重复导入模块或定义函数 [^5]。 --- ### 2. 使用模块化方式调用公用方法 如果公共方法定义在单独的模块中,例如 `common/com.py`,则可以通过 `import` 语句直接导入并使用。确保模块路径已添加到 `PYTHONPATH` 或当前工作目录下,以便 `pytest` 能够正确识别: ```python # common/com.py def load_yaml(): return "loaded" ``` 在测试用例中调用: ```python from common.com import load_yaml def test_load_yaml(): result = load_yaml() assert result == "loaded" ``` 如果模块路径未被正确识别,可以在 `conftest.py` 中动态添加路径: ```python import sys import os sys.path.append(os.path.abspath("../..")) ``` --- ### 3. 使用 `fixture` 实现数据初始化与清理 在 `pytest` 中,`fixture` 是一种用于提供测试环境的机制,可以用于调用公用方法,例如数据库连接、配置加载等。以下是一个使用 `fixture` 初始化数据库连接的示例: ```python # conftest.py import pytest from common.db import DBUtil @pytest.fixture(scope="session") def db_connection(): db_info = {"host": "localhost", "port": 3306, "user": "root", "password": "123456"} db = DBUtil(**db_info) yield db db.close() ``` 在测试用例中调用: ```python def test_db_query(db_connection): result = db_connection.query("SELECT * FROM users") assert len(result) > 0 ``` 该方法确保测试用例执行前完成数据库连接,并在所有测试完成后执行清理操作 [^5]。 --- ### 4. 使用 `pytest` 命令行参数控制公共方法执行 `pytest` 支持通过命令行参数控制测试执行行为。例如,可以使用 `-m` 参数结合自定义标记运行特定的测试用例。以下是一个标记 `webtest` 的示例: ```python # test_example.py import pytest @pytest.mark.webtest def test_web_request(): assert True ``` 执行带有 `webtest` 标记的测试用例: ```bash pytest -v -m webtest ``` 该方法可以与 `fixture` 结合使用,确保特定的公共方法仅在特定标记的测试用例中调用 [^2]。 --- ### 5. 使用 `__init__.py` 确保模块可导入 确保 `common` 目录及其子目录包含 `__init__.py` 文件,以便 Python 将其识别为模块。例如: ``` project_root/ ├── common/ │ ├── __init__.py │ └── com.py └── tests/ └── test_example.py ``` 在 `test_example.py` 中可以直接导入 `common.com` 模块: ```python from common.com import load_yaml ``` 如果缺少 `__init__.py` 文件,将导致 `ModuleNotFoundError` 错误 [^2]。 --- ### 6. 使用 `sys.path` 动态添加路径 如果模块路径未被自动识别,可以在测试脚本中动态添加路径: ```python import sys import os sys.path.append(os.path.abspath("../..")) from common.com import load_yaml ``` 该方法适用于临时测试或调试环境,但不推荐在正式测试中频繁使用 。 --- ### 7. 在 `pytest` 中使用 `__main__` 执行测试用例 可以在测试文件中使用 `__main__` 入口直接执行测试用例,并结合 `pytest` 的命令行参数进行控制: ```python import pytest if __name__ == "__main__": pytest.main(["-s", "-v", "test_example.py"]) ``` 此方式适用于快速运行测试并查看结果,同时可以结合 `fixture` 和 `mark` 等功能实现灵活的测试控制 [^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值