【Python】python进阶篇之数据库操作

news2024/9/29 1:21:48

数据库操作

pip3安装mysql依赖

pip3 list|grep mysql

在这里插入图片描述

pip3 install mysql-connector-python
#指定版本
pip3 install mysql-connector-python==版本号
#升降版本
pip3 install --upgrade mysql-connector-python==版本号

在这里插入图片描述

原生SQL操作

操作mysql可以使用pymsql或mysql-connector-python等

  1. 数据库驱动类型: pymysql是纯Python实现的MySQL客户端库,而mysql-connector-python是MySQL官方提供的官方驱动程序,是用C实现的。
  2. 兼容性和特性: mysql-connector-python官方驱动程序对MySQL数据库的兼容性更好,并支持一些高级特性,如事务、数据库迁移工具等。而pymysql在兼容性方面也很好,但可能会有一些限制,特别是在某些特定的高级功能方面。
  3. 性能: 由于pymysql是纯Python实现,相对而言,在某些情况下可能会比mysql-connector-python慢一些。mysql-connector-python通过底层C实现,可以提供更高的性能。
  4. 使用和API风格: pymysql提供了类似于Python的DB API 2.0的接口风格,而mysql-connector-python使用了更现代化和Pythonic的API设计。API的使用和风格可能会略有不同,根据个人偏好和习惯来选择。

开发代码流程

1:连接数据库

2:创建游标对象

3:对数据进行增删改查

4:关闭游标、关闭连接

增删改查实现

insert、select
import traceback

import mysql.connector
from SnowFlake import Snowflake
import datetime


# 建立连接
def connectMySQL():
    try:
        connect = mysql.connector.connect(host="localhost",
                                          port=3306,
                                          user="xxxx",
                                          password='xxxx',
                                          database="xxxx",
                                          autocommit=False)
        print("mysql连接成功")
        return connect
    except mysql.connector.Error as err:
        print(f"数据库连接失败:{err}")


# insert
def insertData(connect, cursor, insertSQL, data):
    try:
        # 开启事务
        connect.start_transaction()
        # 执行sql
        cursor.execute(insertSQL, data)
        # 提交事务
        connect.commit()
    except mysql.connector.Error as err:
        connect.rollback()
        # 打印堆栈信息
        traceback.print_exc()
        print(f"发生错误,事务回滚:{err}")


# 查询数据
def selectData(cursor, sql, param=None):
    print("查询数据参数:", param)
    if param is None:
        cursor.execute(sql)
    else:
        cursor.execute(sql, param)
    rows = cursor.fetchall()
    for row in rows:
        print("bizCode: {}, Name: {}, Age: {},createdTime:{}".format(row[0], row[1], row[2],
                                                                     row[3].strftime("%Y-%m-%d %H:%M:%S")))
    return rows


if __name__ == '__main__':
    # 创建数据库连接
    connect = connectMySQL()
    # 创建游标对象
    cursor = connect.cursor()

    # 插入数据
    insertSQL = "insert into t_cust_user (biz_code,user_name,user_age,created_time,yn) value " \
                "(%s,%s,%s,%s,%s)"

    # 插入数据
    bizCode = str(Snowflake(worker_id=0, datacenter_id=0).generate_id())
    userName = "杜甫"
    userAge = "99"
    yn = 1
    createdTime = datetime.datetime.now()
    data = (bizCode, userName, userAge, createdTime, yn)
    insertData(connect, cursor, insertSQL, data)

    # 查询数据
    selectData(cursor, "select biz_code,user_name,user_age,created_time from t_cust_user")
    param = (2,)
    selectData(cursor, "select biz_code,user_name,user_age,created_time from t_cust_user where id=%s"
               , param)

    # 关闭游标和连接
    cursor.close()
    connect.close()

碰到的问题:

mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement

因为无论是数字(包括整数和浮点数)、字符串、日期时间或其他任意类型,都应该使用%s占位符。

orm第三方框架

内容来源于AI

在Python中,有许多第三方ORM(对象关系映射)框架可供选择,用于简化数据库操作和数据模型管理。以下是几个常用的Python第三方ORM框架的简要比较:

  1. SQLAlchemy: SQLAlchemy 是一个功能强大的ORM框架,支持多种数据库后端。它提供了高级的查询语言和灵活的对象关系映射功能。SQLAlchemy支持多种数据模型的定义方式,包括基于类的声明式方式和基于表的方式。它还提供了事务支持、连接池管理、复杂查询构建等功能。
  2. Django ORM: Django是一个流行的Web开发框架,其中包含了自带的ORM工具。Django ORM提供了简单易用的API,支持常见的数据库操作和查询。它使用类似于Active Record模式的数据模型定义方式,能够快速地进行数据库操作和关联查询。Django ORM还提供了数据库迁移、事务管理、缓存等功能,与Django框架无缝集成。
  3. Peewee: Peewee是一个轻量级的ORM框架,设计简单且易于使用。它提供了类似于Django ORM的API,支持多种数据库后端。Peewee具有简洁的模型定义语法和灵活的查询构建方式。它还提供了事务支持、连接池管理、模型迁移等功能,适合小型项目或对ORM需求相对简单的应用。
  4. Pony ORM: Pony ORM是一个简单但功能强大的ORM框架,支持多种数据库后端。它提供了类似于SQLAlchemy的查询构建方式,使用Python原生的生成器和表达式语法。Pony ORM具有自动连接管理、延迟加载、事务支持等特性。它还支持高级查询功能,如查询表达式、关联查询、子查询等。

这些是其中一些常见的Python第三方ORM框架,每个框架都有其独特的特点和适用场景。选择合适的ORM框架取决于项目需求、开发经验和个人偏好。建议在选择之前仔细研究和评估每个框架的文档、功能、性能以及社区支持等因素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/687982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于html+css的图展示138

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

第三章 决策树

文章目录 第三章 决策树3.1基本流程3.2划分选择3.2.1信息增益3.2.2增益率3.2.3基尼指数 3.3剪枝处理3.3.1预剪枝3.3.2后剪枝 3.4连续与缺失值3.4.1连续值处理3.4.2缺失值处理 3.5多变量决策树3.7实验 第三章 决策树 3.1基本流程 决策过程: 基本算法: …

灵雀云获Gartner® 首份《DevOps平台魔力象限报告》“荣誉提及”

随着平台工程理念的崛起,企业使用的独立的DevOps工具链逐渐向更先进、更便捷的DevOps平台演进。Gartner发布了首份DevOps平台魔力象限报告(Gartner Magic Quadrant for DevOps Platforms)。在这个备受关注的报告中,中国云原生厂商…

大势智慧软硬件技术答疑第五期

1.控制点误差表达到多少就可以? 答:水平和高程误差在0.01左右就可以,图示精度是满足的。 2.三维影像有颜色,为什么生成的是二维影像是黑色的? 答:使用dasviewer的工具-输出正射图再试试。 3.最新模方对ps版…

JMeter中常见的四种参数化实现方式是什么?

1 参数化释义 什么是参数化?从字面上去理解的话,就是事先准备好数据(广义上来说,可以是具体的数据值,也可以是数据生成规则),而非在脚本中写死,脚本执行时从准备好的数据中取值。 参…

浅析移动警务App中的技术痛点与挑战

移动警务是指警务机关利用移动通信技术和移动设备,实现警务信息化、智能化和移动化的一种工作模式。通过移动警务,警务人员可以随时随地进行警务工作,提高警务反应速度和效率。 移动警务通常包括以下方面的内容: 移动巡逻&#x…

【ArcGIS Pro二次开发】(43):线闭合

当我们需要将多段线【polyline】转为面【polygon】的时候,必须保证线是闭合的,不然是无法生成面的,如下图: 如果cad线段,可以在属性里将闭合选项设置为是,实现线的闭合: 但如果是在ArcGIS Pro里…

【inpho精品教程】07 动连点自动提取和区域网平差

【inpho精品教程】07 动连点自动提取和区域网平差 文章目录 【inpho精品教程】07 动连点自动提取和区域网平差一、数据及参数检查二、参数设置三、运行四、 连接点提取失败的原因五、 连接点较差的原因一、数据及参数检查 在动连点自动提取和区域网平差之前,首先要检查工程中…

Miniconda安装使用教程

下载 官网地址:https://docs.conda.io/en/latest/miniconda.html 支持的系统: Windows 10 or newer, 64-bit macOS 10.13, or Linux, including Ubuntu, RedHat, CentOS 7, and others. 支持的系统架构: Windows- 64-bit x86, 32-bit x86; m…

Json 数据通用提取工具,使用 HTML JavaScript [单文件离线版]

Gitee 地址链接 Json2Csv js html 实现的一款通用型JSON数据提取工具,支持自动识别JSON数据节点并有序提取为CSV文件。 Convenient JSON data extraction tool. 使用简介 数据路径:设置Json中数据所处路径,如’root.topics.data’ ‘data.…

JavaWeb小记——请求对象request

目录 request对象 获取请求行 获取请求方式 获取项目的上下文路径 获取URI 获取URL 获取IP地址 获取协议版本 获取请求参数 获取请求头 获取日期头 获取数字头 获取请求体 获取请求参数 通用方式获取请求参数 单个获取 针对复选框 获取所有参数(map&…

Matlab基础知识汇总(小白速成)

1.矩阵 1.矩阵运算符 运算符号说明具体表现实现转置A.矩阵转置共轭转置A复矩阵共轭转置,当A为实数矩阵时等价于A.加减AB、A-B矩阵元素之间相互进行加减数与矩阵加减KA、K-A数与矩阵的加减操作数乘以矩阵k*A数对矩阵中的每个元素进行相乘矩阵相乘A * B A.*B乘法运算…

单片机STM32看门狗详解(嵌入式学习)

单片机STM32看门狗 什么是看门狗为什么需要看门狗?STM32CubeMX配置和应用示例独立看门狗(IWDG)窗口看门狗(WWDG) 注意事项 什么是看门狗 单片机STM32的看门狗(Watchdog)是一种硬件定时器&#…

PRL:城大团队提出新型量子理论

光子盒研究院 近期,由香港城市大学(城大)物理学家领导的团队开发了一个新的量子理论,解释了物质的“光诱导阶段(light-induced phase)”,并预测了它的新功能。 3月初,研究成果以Multidimensional Coherent …

基于Arduino UNO的智能摇头避障小车

目录 1.首先介绍两个基本函数 2.L298N控制逻辑 3.让小车实现前后左右轮子动代码示例 4.串口介绍 5.跟随小车开发 6.摇头避障小车开发 7.实物展示 1.首先介绍两个基本函数 void setup() { // put your setup code here, to run once: 把你的设置代码放在这里&#xff0…

创建项目并精细化配置【Vue3】

创建项目并精细化配置 git管理项目 基于 create-vue 创建出来的项目默认没有初始化git仓库,需要我们手动初始化 执行命令并完成首次提交 git initgit addgit commit -m “init” 什么是别名路径联想提示 在编写代码的过程中,一旦输入 /,V…

【数据分享】1929-2022年全球站点的逐日平均露点数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 对于具体到监测站点的气象数据,之前我们分享过1929-2022年全球气象…

【零基础入门学习Python---Python函数和模块】

🚀 Python 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

protoBuf

序列化和反序列化 链接 序列化的对象是什么 程序对象 对象序列化之后是什么 字节流 protocol buffer 链接 教程 原文链接 Protocol Buffer 的作用 通过将结构化的数据(拥有多种属性)进行序列化,从而实现(内存与硬盘之间…

探索MediaPipe检测人脸关键点

MediaPipe是Google开源的计算机视觉处理框架,基于TensorFlow来训练模型,支持人脸识别、人脸关键点、物体检测追踪、图像分类、人像分割、手势识别、文本分类、语音分类等。我们可以使用CPU来推理,也可以选择GPU加速推理。在滤镜特效场景&…