python基础之ORM操作Mysql数据库

首先简单介绍下SQLalchemy库和sqlacodegen库。

SQLalchemy 库是一个流行的 Python 数据库工具,用于与各种关系型数据库进行交互。它提供了一个统一的 API,使得开发人员可以使用相同的代码来操作不同的数据库,而无需关心数据库的具体细节。

`sqlacodegen`库是一个用于生成 Python 数据库模型的工具。它可以帮助你在开发过程中更快速地创建数据库模型,减少手动编写模型代码的工作。它会根据你提供的数据库连接信息和要生成模型的表名,自动生成相应的 Python 类。

接下来介绍下如何使用SQLalchemy库来操作数据库(不在flask等框架内使用)

1、安装SQLalchemy库和sqlacodegen库

安装SQLalchemy库

pip install sqlalchemy

安装sqlacodegen

pip install sqlacodegen

目前sqlacodegen库和flask-sqlacodegen库对SQLalchemy库的版本要求不一样,不能同时安装这两个库,如果需要请在虚拟环境中使用。

2、生成model类文件

在项目目录中,打开命令行工具,执行以下命令。

sqlacodegen mysql+pymysql://root:root3@127.0.0.1:3306/test --tables t_comm_grid --outfile models.py

sqlacodegen mysql+pymysql://root:root3@127.0.0.1:3306/test:指定了要连接的数据库。这里使用的是 MySQL 数据库,通过 `mysql+pymysql` 指定了数据库驱动和连接字符串。`root:root3@127.0.0.1:3306` 是数据库的用户名、密码和地址。`test` 是数据库名称。

--tables t_comm_grid:指定了要生成模型的表名。这里只选择了表 `t_comm_grid`。如果需要生成库中所有的表,则不需要添加此参数。--outfile modelsm.py:指定了生成的模型文件的名称。这里将模型文件命名为 `modelsm.py`。执行这个命令后,`sqlacodegen` 工具将根据指定的表名和连接信息,生成一个 Python 模型文件。这个模型文件将包含映射到表的类和相应的属性和方法,以便在 Python 代码中操作数据库表。

生成的model对象文件格式如下:

# coding: utf-8from sqlalchemy import Column, DateTime, Float, String, TIMESTAMP, textfrom sqlalchemy.dialects.mysql import INTEGERfrom sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()metadata = Base.metadataclass TQianshouDeliverRecord(Base):    __tablename__ = 't_qianshou_deliver_record'    __table_args__ = {'comment': '送货签收表'}    id = Column(String(100), primary_key=True)    songhuo_user_name = Column(String(100))    songhou_time = Column(DateTime, comment='时间')    sign_time = Column(DateTime, comment='日期')    license = Column(String(100), comment='证号')    cust_name = Column(String(255), comment='名称')    offset_distance = Column(Float(20, True), comment='距离')    is_contrast = Column(INTEGER(2), comment='是否对比(0,未对比 1,已对比)')    result = Column(String(255), comment='正常,异常')    contrast_time = Column(DateTime, comment='对比时间')    state = Column(INTEGER(11), nullable=False, server_default=text("'1'"), comment='数据状态0、删除1、正常')    create_id = Column(String(40), comment='添加时间')    create_date = Column(TIMESTAMP)    update_id = Column(String(40))    update_date = Column(TIMESTAMP)    delete_id = Column(String(40))    delete_date = Column(TIMESTAMP)

注意:如果在生成的过程中报以下错误,

ImportError: cannot import name 'ArgSpec' from 'inspect'

找到对应的文件,将以下一行注释掉以后再次重新执行以上命令。

3、在其他文件中使用生成的model对象操作数据库。

(1)导入所需的库,以及索要操作的数据库表对象

from sqlalchemy import create_engine,MetaData,Column, Integer, Stringfrom sqlalchemy.orm import sessionmakerfrom models import TQianshouDeliverRecord

(2)创建数据库实例

# 数据库连接DATABASE_URI = 'mysql+pymysql://root:root@127.0.0.1:3306/test'engine = create_engine(DATABASE_URI,encoding='utf-8',echo=True)Session = sessionmaker(bind=engine)session = Session()

(3)对数据库进行操作

查询

eqd = session.query(TQianshouDeliverRecord).filter_by(license=license,sign_time=signtime).first()

添加

 id = str(uuid.uuid4())uploadimg(downloadDir,id)qd = TQianshouDeliverRecord(id=id,                            license=license,                            songhuo_user_name=sender,                            songhou_time=senddate,                            sign_time=signtime,                            cust_name=customer,                            offset_distance=length,                            create_date=datetime.now(),                            )session.add(qd)

更新

eqd.songhuo_user_name=sendereqd.sign_time=signtimeeqd.cust_name=customereqd.offset_distance=lengtheqd.update_date=datetime.now()

最后不要忘了提交修改

session.commit()

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

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

相关文章

【笔记】Helm-4 最佳实践-8 基于角色的访问控制

基于角色的访问控制 最佳实践的这部分讨论在chart清单中创建和格式化RBAC资源。 RBAC资源有: ServiceAccount(namespaced) Role(namespaced) ClusterRole RoleBinding(namespaced) ClusterRoleBinding YAML配置 RBAC和服务账户配置应该独立的key。它们是独立…

【WinRAR技巧】WinRAR整理密码是什么意思?

之前给大家介绍过WinRAR自动加密的设置方法,今天再介绍一种RAR压缩包加密方法:整理密码。 什么是整理密码: 在加密rar文件的时候,点击下拉框选择密码,不用输入密码 设置方法: 前面的操作步骤和设置自动…

ubuntu22.04@laptop安装配置VNC服务端

ubuntu22.04laptop安装&配置VNC服务端 1. 源由2. 系统安装3. VNC安装3.1 系统更新3.2 lightdm安装3.3 x11vnc安装3.4 x11vnc配置3.5 x11vnc自启动3.6 x11vnc状态查询 4. 演示视频 1. 源由 最近系统搞TensorFlow, OpenCV, Python,折腾各种环境,把系统…

GitLab升级16.8.0失败

漏扫报警Gitlab高危漏洞,于是立即升级。 yum命令提示有16.8.0可以升级,输入y 1G的软件包下载完毕,检测正常,安装软件包... 之后报错退出。 根据错误提示了解到由于上一次gitlab-ctl reconfigure执行失败导致执行升级程序退出。…

提升编程效率的利器: 解析Google Guava库之集合篇Table二维映射(四)

在Java开发中,我们经常使用Map数据结构来存储键值对,其中键是唯一的,可以快速查找到对应的值。但在某些场景下,我们可能需要一个更复杂的映射结构,其中键由两部分组成,类似于一个二维表格的行和列。Guava库…

自动化测试脚本编写(超详细)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 自动化测试脚本 什么是自动化测试? 自动化测试是验…

Spring Cloud + Vue前后端分离-第15章 课程总结

源代码在GitHub - 629y/course: Spring Cloud Vue前后端分离-在线课程 Spring Cloud Vue前后端分离-第15章 课程总结 重点难点梳理 环境的搭建 代码生成器 文件上传和视频播放 通用权限设计 学习技巧 养成做笔记的习惯 养成阶段性提交代码的习惯 问答区多交流

springboot 动态导出pdf

springboot 动态导出pdf 原理是通过freemarker插入数据到html模版里面,html你就叫前端帮你写好,他不写你就告诉你主管让他叫他写,你只管往预留的位置插入数据就行,然后通过itextpdf会将准备好html文件转成PDF。 ### 1、准备依赖 &…

思维题之T恤衫

[ABC332C] T-shirts - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 源于atcoder 由于字符串的长度为1000.不论怎样,顺序枚举即可。 import java.awt.FontFormatException; import java.awt.geom.AffineTransform; import java.awt.image.BandCombineOp; import …

自定义注解实现动态数据源

在Java开发中,使用多数据源能够提高系统的灵活性和性能。本文将通过介绍自定义注解的方式,实现动态数据源的切换。通过这种创新性的方法,开发者可以根据业务需求轻松切换数据库连接,实现数据源的动态管理,提升系统的可…

C++类和对象(中)

✨Blog:🥰不会敲代码的小张:)🥰 🉑推荐专栏:C语言🤪、Cpp😶‍🌫️、数据结构初阶💀 💽座右铭:“記住,每一天都是一個新的開始&#x1…

如何在Win系统安装Jupyter Notbook并实现无公网ip远程访问本地笔记

文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 在数据分析工作中,使用最多的无疑就是各种函数、图表、…

Mybatis-Plus基础

typora-copy-images-to: img Mybatis Plus 今日目标: 了解mybatisplus的特点能够掌握mybatisplus快速入门能够掌握mybatisplus常用注解能够掌握mybatisplus常用的增删改查能够掌握mybatisplus自动代码生成 1 MybatisPlus简介 1.1 MybatisPlus概述 ​ MyBatis-…

【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】

文章目录: 1. 下拉菜单 2. 文本域3.label标签 4.按钮- button 4.1 reset重置按钮结合form表单区域使用 5.无语义的布局标签 6.字符实体 注册信息综合案例 表单第二节 1. 下拉菜单 标签: select嵌套option,select是下拉菜单整体,option是下拉菜单的每一项。 代码…

MySQL运维实战(5.1) 字符和编码的基本概念

作者:俊达 字符和编码 字符 字符是符号,是人们用于交流的各类符号,如26个英文字母、汉字、标点符号、数学运算符、其他语言的字母和符号。 编码 编码是计算机中以二进制方式存储字符的方式。每个字符都有一个对应的编码值,计算机…

HarmonyOS --@state状态装饰器

在声明式UI中,是以状态驱动视图更新。 状态(state):指驱动视图更新的数据(被装饰器标记的变量)。 试图(view):基于UI描述渲染得到用户界面 State装饰器标记的变量必须初…

FPGA硬件架构

1.Xilinx FPGA是异构计算平台(所谓异构,就是有很多不同的部分组成):CLB,BRAM,DSP 2. 软核: 把经过功能验证的、可综合的、实现后电路结构总门数在五千门以上的Verilog HDL模型称为软核(soft core)。 硬核: 把在某一…

数字化人才培养-流量的认知

1、流量的分类 公域/商域/私域 公域:公域流量指商家直接入驻平台实现流量转换,比如大家熟悉的拼多多、京东、淘宝、饿了么等,以及内容付费行业的喜马拉雅、知乎、得到等公域流量平台。 公域流量典型的代表有:抖音视频的曝光量、…

JavaScript DOM属性和方法之attribute属性对象

在HTML的DOM中,attribute对象表示HTML属性。HTML属性始终属于HTML元素,它在DOM节点中被称为属性节点。在DOM中,NamedNodeMap对象表示元素属性节点的无序集合,我们可以通过指定的索引访问指定的属性。通过element对象的attribute属…

小红树上染色

记忆化深搜 #include <iostream> #include <string> #include <stack> #include <vector> #include <queue> #include <deque> #include <set> #include <map> #include <unordered_map> #include <unordered_set&g…