【AI总结】python连接MySQL(2)- Python操作MySQL高效封装:告别重复代码,一键执行SQL

使用Python进行数据库交互:从SQL查询到ORM操作的安全实践指南 用户输入: ' OR 1=1;--# 用户输入: ' OR 1=1;input_email } '") # 实际执行: SELECT * FROM users WHERE email = '' OR 1=1;--'# 用户输入: ' OR 1=1;input_email } '") # 实际执行: SELECT * FROM users WHERE email = '' OR 1=1;--'✅ 原生SQL和ORM的CRUD操作✅ 常见错误识别与预防方法✅ 四级SQL注入防御体系。 阅读详情

Python操作MySQL高效封装:告别重复代码,一键执行SQL

摘要:本文将教你如何封装mysql-connector-python,实现传入SQL字符串即可返回结果的通用函数,彻底解决数据库操作中的代码冗余问题!


一、为什么需要封装数据库操作?

在Python操作MySQL时,我们经常遇到这样的痛点:

# 传统方式:每次操作都要重复这些步骤
conn = mysql.connector.connect(...)
cursor = conn.cursor()

try:
    cursor.execute("SELECT * FROM users")
    results = cursor.fetchall()
finally:
    cursor.close()  # 容易忘记关闭连接!
    conn.close()    # 资源泄露风险!

重复代码带来的问题:

  1. 连接管理代码占用了60%以上的数据库操作篇幅
  2. 忘记关闭连接会导致数据库连接耗尽
  3. 异常处理分散在各处,难以统一管理
  4. 业务逻辑与基础设施代码混杂,可读性差

二、通用数据库操作函数封装

完整封装方案(支持查询与非查询操作)

import mysql.connector
from mysql.connector import Error
from typing import Union, List, Tuple, Dict, Any

class MySQLExecutor:
    """MySQL操作通用封装类"""
    
    def __init__(self, config: Dict[str, Any]):
        """
        初始化数据库连接配置
        :param config: 数据库配置字典
        """
        self.config = config
        self.connection = None
        
    def __enter__(self):
        """支持with上下文管理"""
        self.connect()
        return self
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        """退出时自动关闭连接"""
        self.close()
        
    def connect(self):
        """建立数据库连接"""
        try:
            self.connection = mysql.connector.connect(**self.config)
            print("数据库连接成功!")
            return True
        except Error as e:
            print(f"连接数据库失败: {e}")
            return False
            
    def close(self):
        """关闭数据库连接"""
        if self.connection and self.connection.is_connected():
            self.connection.close()
            print("数据库连接已关闭")
    
    def execute_query(
        self, 
        sql: str, 
        params: Union[Tuple, List, None] = None,
        dictionary: bool = False
    ) -> Union[List[Tuple], List[Dict]]:
        """
        执行查询语句(SELECT)
        :param sql: SQL查询语句
        :param params: 查询参数(可选)
        :param dictionary: 是否返回字典格式
        :return: 查询结果列表
        """
        if not self.connection:
            self.connect()
            
        try:
            with self.connection.cursor(dictionary=dictionary) as cursor:
                cursor.execute(sql, params)
                return cursor.fetchall()
                
        except Error as e:
            print(f"查询执行失败: {e}")
            raise
        finally:
            # 注意:不关闭cursor,with语句自动处理
            pass
            
    def execute_command(
        self, 
        sql: str, 
        params: Union[Tuple, List, None] = None,
        commit: bool = True
    ) -> int:
        """
        执行非查询语句(INSERT/UPDATE/DELETE)
        :param sql: SQL操作语句
        :param params: 操作参数(可选)
        :param commit: 是否自动提交事务
        :return: 受影响的行数
        """
        if not self.connection:
            self.connect()
            
        try:
            with self.connection.cursor() as cursor:
                cursor.execute(sql, params)
                affected_rows = cursor.rowcount
                if commit:
                    self.connection.commit()
                return affected_rows
                
        except Error as e:
            print(f"操作执行失败: {e}")
            self.connection.rollback()
            raise

三、封装后的使用示例

1. 基础使用方式

# 数据库配置
db_config = {
    "host": "localhost",
    "user": "your_username",
    "password": "your_password",
    "database": "your_database",
    "charset": "utf8mb4",  # 支持中文
    "pool_size": 5,        # 连接池大小
    "pool_name": "mypool"  # 使用连接池
}

# 创建执行器实例
executor = MySQLExecutor(db_config)

# 执行查询(元组格式)
users = executor.execute_query("SELECT * FROM users WHERE age > %s", (20,))
print("查询结果(元组):", users[:2])  # 打印前两条

# 执行查询(字典格式)
products = executor.execute_query(
    "SELECT name, price FROM products WHERE category = %s", 
    ('电子产品',), 
    dictionary=True
)
print("查询结果(字典):", products[0])

# 执行插入操作
new_user = ("张三", 25, "zhangsan@example.com")
insert_sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
affected = executor.execute_command(insert_sql, new_user)
print(f"插入成功,影响行数: {affected}")

# 关闭连接(可选,类内部已处理)
executor.close()

2. 更优雅的with语句方式

# 使用with上下文管理器(自动处理连接)
with MySQLExecutor(db_config) as executor:
    # 执行批量插入
    employees = [
        ("李四", "开发部", 28),
        ("王五", "市场部", 32),
        ("赵六", "财务部", 45)
    ]
    
    insert_sql = "INSERT INTO employees (name, department, age) VALUES (%s, %s, %s)"
    
    # 关闭自动提交(事务处理)
    executor.execute_command("START TRANSACTION", commit=False)
    
    try:
        for emp in employees:
            executor.execute_command(insert_sql, emp, commit=False)
        
        # 手动提交事务
        executor.execute_command("COMMIT", commit=False)
        print("批量插入成功!")
        
    except Exception as e:
        executor.execute_command("ROLLBACK", commit=False)
        print(f"操作失败已回滚: {e}")

四、封装的高级技巧

1. 结果集转换装饰器

def to_dict(func):
    """将元组结果转换为字典的装饰器"""
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        if not result: 
            return []
            
        # 获取字段名
        with args[0].connection.cursor() as cursor:
            cursor.execute("SELECT 1")  # 仅用于获取描述信息
            columns = [col[0] for col in cursor.description]
            
        return [dict(zip(columns, row)) for row in result]
    return wrapper

# 在类中使用装饰器
class AdvancedMySQLExecutor(MySQLExecutor):
    
    @to_dict
    def query_to_dict(self, sql: str, params=None):
        """自动转换为字典格式的查询"""
        return self.execute_query(sql, params)

2. 连接池优化配置

# 在配置中添加连接池参数
pool_config = {
    **db_config,
    "pool_name": "mypool",
    "pool_size": 10,  # 连接池大小
    "pool_reset_session": True,
    "autocommit": False  # 建议手动控制事务
}

# 使用连接池
with MySQLExecutor(pool_config) as executor:
    # 执行操作...

3. 支持异步操作(Python 3.7+)

import asyncio
from mysql.connector import pooling

class AsyncMySQLExecutor:
    """异步MySQL执行器"""
    
    def __init__(self, config):
        self.pool = pooling.MySQLConnectionPool(**config)
        
    async def execute(self, sql, params=None):
        loop = asyncio.get_running_loop()
        conn = self.pool.get_connection()
        
        try:
            with conn.cursor() as cursor:
                await loop.run_in_executor(
                    None, 
                    lambda: cursor.execute(sql, params)
                )
                
                if sql.strip().lower().startswith('select'):
                    return await loop.run_in_executor(None, cursor.fetchall)
                else:
                    conn.commit()
                    return cursor.rowcount
                    
        finally:
            conn.close()

五、封装带来的优势

  1. 代码复用率提升
    数据库操作代码减少70%,核心业务逻辑更突出

  2. 资源管理自动化
    自动处理连接关闭,避免资源泄露

  3. 统一异常处理
    集中管理所有数据库操作异常

  4. 灵活的事务控制
    支持手动/自动提交模式切换

  5. 多种返回格式
    自由选择元组或字典格式结果集

  6. 线程安全
    通过连接池支持并发操作


六、封装使用注意事项

  1. SQL注入防护
    务必使用参数化查询(%s占位符),避免直接拼接SQL字符串

  2. 长连接管理
    长时间空闲的连接需设置wait_timeout或使用连接池

  3. 事务边界控制
    复杂业务逻辑中合理划分事务范围

  4. 连接池限制
    避免创建过多连接池(每个进程一个连接池最佳)

  5. 二进制数据编码
    处理BLOB类型数据时需指定binary_prefix=True

# 二进制数据安全处理示例
with MySQLExecutor(db_config) as exe:
    # 读取图片
    with open('photo.jpg', 'rb') as f:
        image_data = f.read()
    
    # 插入数据库
    exe.execute_command(
        "INSERT INTO images (name, data) VALUES (%s, %s)",
        ('avatar', image_data),
        commit=True
    )

结语:通过合理封装mysql-connector-python,我们不仅消除了重复代码,还实现了更安全、高效的数据库操作模式。这种封装思想同样适用于其他数据库驱动(如psycopg2、pymssql等),是Python工程师必备的高级技能!

扩展建议:

  1. 集成配置管理(如从环境变量读取数据库配置)
  2. 添加SQL执行日志记录功能
  3. 实现数据库迁移脚本管理
  4. 整合到Web框架(Flask/Django)作为扩展

GitHub参考项目:

关键词:Python MySQL封装、mysql-connector高级用法、数据库连接池、SQL执行封装、Python数据库最佳实践

LabVIEW与MySQL构建学生成绩管理系统:从数据库设计到功能实现 在桌面级信息管理系统的开发中,图形化编程语言与关系型数据库的组合日益常见。LabVIEW以其拖拽式界面设计和高效的仪器控制能力,成为数据采集与上位机开发的优选工具;而MySQL作为成熟的关系型数据库,能够提供稳定的数据存储、事务处理和复杂的SQL查询支持。两者的结合,使得开发者无需编写传统C/S架构客户端,即可快速构建功能完整的管理系统。本文从数据库规范化设计入手,讲解三表关联模型,并系统介绍ODBC连接、SQL执行、中文乱码处理等关键技术。结合实际工程场景,阐述登录验证、成绩录入与条件查询等模块的实现思路 阅读详情

相关推荐

2021年9月AI三大拐点:多模态、代码生成与AI治理的协同演进

多模态AI是指让机器同时理解文本、图像、语音等多种信息形式的技术范式,其核心在于跨模态语义对齐与隐空间建模;代码生成则代表AI从感知走向行动的关键跃迁,依托大模型对编程语言结构与上下文逻辑的深度学习,实现人机协同开发。这两项技术在2021年9月迎来工程化临界点——DALL·E 2突破图文生成质量阈值,GitHub Copilot达成真实场景32.6%采纳率,标志着AI不再停留于演示阶段,而是嵌入设计与开发一线。与此同时,欧盟AI法案草案首次将‘高风险系统’‘透明度’‘人工监督权’等抽象原则转化为可审计、可编

321

python连接mysql、hive、clickhouse数据库封装类(2023年2月)

通过sqlalchemy统一python的数据库读数方式

my_name_is_learn的博客 1526

Claude Code SKILL进阶指南:从代码生成到AI工作流架构

在AI辅助编程领域,提示工程(Prompt Engineering)是提升大语言模型输出质量与一致性的核心技术。其原理在于通过结构化、精细化的指令设计,引导模型进行链式推理(Chain-of-Thought),从而将一次性的模糊对话转化为可重复、可靠的任务处理流程。这项技术的核心价值在于,它能将开发者从被动的代码“索取者”转变为能精准指挥AI的“架构师”,实现工作模式的根本性革新。在应用场景上,它尤其适用于代码审查、项目脚手架生成、技术方案咨询、正则表达式编写等有固定模式、需要高质量结构化输出的开发任务。本

hqmln的博客 873

Python关于MySQL常用方法封装

Python关于MySQL常用方法封装,示例中的这个类封装了execute, fetchone,fetchall,query,insert,update,delete,close等方法,可以根据需要再添加。

weixin_58736852的博客 344

Codex Skill深度解析:8个必装技能让AI编程助手从问答机变执行者

在AI编程领域,Skill(技能)是提升开发效率的关键。它本质上是一种封装了特定领域知识、工作流和最佳实践的“插件”或“指令集”,能让AI助手从简单的问答模式,升级为能理解上下文、执行复杂任务的“专家系统”。其技术原理在于通过预定义的模板和规则,将自然语言指令映射为结构化的代码、文档或操作流程,从而大幅降低开发者的认知负荷,保证输出的一致性和规范性。这种技术价值在于将开发者从重复性劳动中解放出来,使其能更专注于核心业务逻辑和创新性设计。应用场景广泛覆盖软件开发全生命周期,包括但不限于快速生成标准CRUD代码

weixin_33725270的博客 497

【AI智能体】Codex AI 辅助编程高级技能实战操作详解

Codex AI 辅助编程高级技能实战操作详解

congge 6755

Python操作Mysql的简单封装

文章目录一、安装依赖二、实现类 一、安装依赖 pip install mysqlclient 二、实现类 # encoding: utf-8 # sql导出 # mysqldump -u root -p db_name > test_db.sql import MySQLdb class MySqlOp(object): def __init__(self, host, port, username, password, db): self.host = host

什么都干的派森 3029

用Matlab系统辨识工具箱搞定温控系统建模:从阶跃响应到传递函数(附完整代码)

本文详细介绍了如何使用Matlab系统辨识工具箱进行温控系统建模,从阶跃响应数据采集到传递函数参数辨识的全过程。通过实际案例和完整代码,帮助工程师快速掌握PID控制参数整定技巧,提升温控系统设计效率。特别适合单片机开发者和自动化控制工程师参考。

weixin_30736301的博客 309

python——MySQL封装操作

【代码】python——MySQL封装操作。

python全栈 4070

从“破解”到应用:三菱数控系统M80协议逆向分析与工业数据采集网关搭建指南

本文深入解析三菱数控系统M80协议的逆向分析方法与工业数据采集网关搭建技术。通过TCP协议实现跨平台通信,详细介绍了M80协议的数据包结构、多语言实现方案(C#、Java、C/C++)以及Linux数据采集网关的架构设计与容器化部署。为工业自动化领域的开发者提供从协议分析到企业级数据采集落地的完整解决方案。

weixin_29228781的博客 1211

代谢组学数据分析实战:用R语言从PCA、PLS-DA到OPLS-DA一步步搞定(附代码)

本文详细介绍了使用R语言进行代谢组学数据分析的全流程,从数据预处理到PCA、PLS-DA和OPLS-DA模型构建与验证。通过实际案例和代码示例,帮助研究者掌握关键分析技术,提升数据解读能力,特别适合生命科学领域的研究人员。

weixin_28689507的博客 132

python封装一个 MySQL 连接类,继承自 MySQLConnector

在Python中,你可以创建一个MySQL连接类,通常会继承自`mysql-connector-python`库中的`mysql.connector.connection.MySQLConnection`基础类。封装这个类可以帮助管理数据库连接、执行查询以及关闭连接等操作。在这个例子中,`MysqlDBConnection`类初始化时连接到数据库,并提供了一些额外的方法如`execute_query`用于执行SQL查询,以及`close`方法负责关闭连接。

cyj0919的博客 537

优惠券管理

(请设计一个优惠券兑换码生成方案,可以支持20亿以上的唯一兑换码,兑换码长度不超过10,只能包含字母数字,并且要保证生成和校验算法的高效)最后把签名值的后14位、新鲜值(4位)、自增序列(32位)拼接,得到一个50位二进制数,然后与一个较大的质数做异或运算加以混淆,再基于Base32或Base64转码,即可的对兑换码。现在,就剩下防止爆刷了。自增id从1增加到Integer的最大值,可以达到40亿以上个数字,而占用的字节仅仅4个字节,也就是32个bit位,距离50个bit位的限制还有很大的剩余,符合要求!

qq_36312661的博客 2204

达梦 vs MySQL:如何用快马AI平台快速构建数据库性能对比工具?

这个工具后续还可以扩展更多数据库类型的支持,比如Oracle、PostgreSQL等,有了快马平台的AI助力,开发效率至少提升了3倍。对于需要做技术选型的团队,强烈推荐试试这个方法。最近工作中需要评估达梦数据库和MySQL的性能差异,传统的测试方法需要手动编写大量重复代码,效率很低。在快马平台新建Python项目后,第一步是配置两种数据库的连接。平台内置的AI代码补全功能帮了大忙,输入几个关键词就能自动生成正确的连接代码模板。这里用到了平台的代码调试功能,可以实时查看变量值,快速定位兼容性问题。

SunstoneLion34的博客 802

OpenCASCADE(OCC)读取 STEP 模型文件并在MFC中显示

OpenCASCADE(OCC)读取 STEP 模型文件并在MFC中显示

weixin_61900468的博客 1万+

微信小程序 - 最新将页面可分享到朋友圈功能,小程序实现分享到朋友圈功能,开启分享给好友及分享朋友圈功能(微信小程序怎么分享到朋友圈?详细流程及示例代码教程)

没有设置过分享朋友圈功能的小程序,分享朋友圈按钮是灰色且无法点击。小程序 vue2 | vue3 版本语法都能使用,跟着教程复制代码运行即可。如下图所示,将页面开启分享后便可由用户转发出去。

🏆 前端领域优质创作者 2416

MCP Toolbox:构建AI驱动的数据库工具集框架

你是否曾想过,让AI助手直接与你的数据库对话?或者为你的应用快速构建安全的数据库操作工具?MCP Toolbox正是为此而生——这是一个开源的MCP服务器框架,专为数据库操作设计。它不仅提供预构建的数据库工具,更重要的是,它为你提供了一个构建自定义AI工具的强大框架。 想象一下,你的AI助手能够理解自然语言查询,自动转换为SQL语句,并安全地执行在数据库上。或者你的应用能够通过简单的配置,获得完

gitblog_01052的博客 441

基于单片机的智能体重秤设计与嵌入式程序实现

智能体重秤的基本功能是测量用户的体重,并将数据通过无线方式传输到终端设备(如智能手机、电脑或云平台)进行管理。体重测量:实时测量用户体重,并进行数据存储。BMI(体质指数)计算:基于体重和身高计算BMI值,帮助用户了解健康状况。多用户管理:通过蓝牙或Wi-Fi技术支持多用户体重数据记录。健康数据分析:结合历史数据分析体重变化趋势。语音播报:通过语音播报用户体重,便于老人或视力不便的人士使用。数据同步:通过App或云平台同步数据,进行长期健康监控。

2201_76125393的博客 1755

测试开发干货:用 Python 玩转数据库,告别 pymysql 的繁琐操作!

records虽然功能不如 SQLAlchemy 强大,但在测试开发场景下,它的简洁和高效是无可替代的。无论是接口自动化造数、数据校验,还是性能测试前的数据准备、测试后的数据清理,它都能帮你节省大量时间。如果你还在写冗长的 pymysql 代码,不妨试试 records,相信你会打开新世界的大门!

228

CLRNet车道线检测模型在Orin Nano Super开发板上的全栈部署与优化实践

本文详细介绍了将CLRNet车道线检测模型部署到NVIDIA Orin Nano Super开发板的全过程。内容包括:1) Orin开发板硬件规格分析;2) JetPack SDK环境配置与Python虚拟环境搭建;3) CLRNet模型架构解析与PyTorch实现;4) 模型转换与TensorRT加速优化方法。通过系统性的环境配置、模型转换和性能优化,为边缘计算场景下的车道线检测应用提供了完整的解决方案,实现了在Orin平台上的高效部署。

huanghm88的专栏 226

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

AI编程时代:从提示词工程到Agent协作,重塑高效人机开发工作流

在软件工程领域,人机协作模式正经历深刻变革。以提示词工程(Prompt Engineering)和AI智能体(AI Agent)为代表的技术,通过优化与大型语言模型的交互逻辑,将模糊需求转化为精确指令,并实现任务自主规划与执行。其核心价值在于显著降低认知负荷,将开发者从重复性编码中解放,转而聚焦于系统设计、质量守护与架构决策。这一转变尤其适用于现代软件开发中快速原型构建、代码评审自动化及复杂工作流编排等场景。本文结合一线实践,深入探讨如何通过结构化提示词模板、AI代码准入规范及循环工程(Loop Engin

weixin_34396902的博客 341

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

从Java后端到Python大模型:我的学习转型与规划

摘要: 本文分享了一名Java后端开发者转型学习Python大模型的经历与规划。作者通过四个月系统学习掌握了Java核心技术、中间件和项目实战经验,随后意识到大模型正在重塑开发模式,决定转向Python大模型领域。文章提出结合Java基础优势快速掌握Python语法,将后端经验迁移至大模型学习,并建议分阶段从数据科学基础到核心技术再到实战融合的学习路径。最后强调在AI时代保持技术敏锐度,通过"Java+大模型"的跨语言融合打造差异化竞争力,实现从基础开发向智能开发的转型。(149字)

2401_86509639的博客 1514

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Python编程的新时代:智能IDE如何助力开发者高效创新

最新接入DeepSeek-V3模型,点击下载最新版本InsCode AI IDE 标题:Python编程的新时代:智能IDE如何助力开发者高效创新 在当今快速发展的科技时代,编程语言的演进和开发工具的进步相辅相成。Python作为一种简洁而强大的编程语言,已经在数据科学、机器学习、Web开发等多个领域占据了重要地位。然而,随着项目复杂度的增加,开发者面临着越来越多的挑战,如代码质量、开发效率和团队...

inscode_019的博客 268

8个必装Skill:让Codex从代码生成器进化为全能AI开发伙伴

在AI编程助手日益普及的今天,如何让手中的工具发挥出最大效能,是每个开发者都在思考的问题。很多朋友在使用Codex这类AI编程工具时,常常感觉它“不够聪明”或“答非所问”,其实问题往往不在于模型本身,而在于我们是否为其配备了合适的“技能包”。本文将为你深度解析8个能显著提升Codex实战能力的必装Skill,涵盖代码生成、调试、文档、架构设计等多个维度,并提供从安装到实战的完整指南。无论你是想提升日常编码效率,还是希望AI能更好地理解你的项目上下文,这篇文章都能为你提供一套即插即用的解决方案。 1. 理解C

diaohuyi6830的博客 428

【精选】基于Python的石家庄地铁数据可视化分析系统(源码+定制+开发)

推荐算法是一类算法,它根据用户的历史行为、偏好和需求,利用数据分析技术为用户推荐他们可能感兴趣的商品或服务。常见的推荐算法包括基于内容的推荐、协同过滤推荐以及混合推荐等。基于内容的推荐通过分析用户过去喜欢的物品特征来推荐类似的物品;协同过滤推荐则分为用户基和物品基两种,前者通过找到相似用户来推荐物品,后者则是通过找到相似物品来进行推荐;混合推荐结合了多种方法,以提高推荐的准确度和覆盖度。随着人工智能技术的发展,深度学习也被应用于推荐系统中,使得推荐更加精准和个性化。return []2.8测试概述。

程序员阿龙的博客 848

AI辅助开发:4天完成CRM系统原型的实践与思考

在软件开发领域,AI辅助编程正在改变传统的开发模式。通过将自然语言指令转化为可执行代码,开发者可以更高效地完成项目。本文以CRM系统开发为例,展示了如何利用Claude等AI工具进行需求分析、架构设计和模块化开发。重点探讨了提示词工程、代码审查和知识管理等关键技术,以及如何从编码执行者转变为AI指令工程师。实践表明,这种开发方式可以显著提升效率,减少技术债务,并提高代码质量。对于中小型项目,AI辅助开发已成为一种可行的快速原型构建方案。

weixin_34220179的博客 476
上一篇: 【保姆级喂饭教程】【抽丝剥茧知识讲解】uv教程一文讲透:安装,创建,配置,工具,命令
下一篇: 【AI总结】python连接MySQL(3)- 数据库配置集中化管理:Python多数据库连接终极方案
荔枝吻
博客等级 码龄5年 533粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝吻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值