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,一经查实,立即删除!

相关文章

【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执行失败导致执行升级程序退出。…

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

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

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装饰器标记的变量必须初…

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…

JAVAEE初阶 网络编程(六)

TCP协议 一. 四次挥手二. 连接管理过程中TCP状态的变化2.1 listen状态2.2 established状态2.3 CLOSE_WAIT状态2.4 TIME_WAIT状态 三. 滑动窗口3.1 ack丢了3.2 数据丢了 一. 四次挥手 我们都知道&#xff0c;在三次握手中是可以把中间步骤合并成一个步骤执行&#xff0c;那么在四…

C语言数据结构(4)——线性表其三(双向链表)

欢迎来到博主的专栏——C语言数据结构 博主ID&#xff1a;代码小豪 文章目录 链表的种类头结点循环链表双向链表带头双向循环链表带头双向循环链表的定义与初始化 空链表尾插法打印双向链表头插法查找指定数据项的节点在指定位置之后插入节点指定位置的删除双向链表的销毁 顺序…

C语言第十二弹--扫雷

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 扫雷 1、扫雷游戏分析和设计 1.1、扫雷游戏的功能说明 1.2 游戏的分析和设计 1.2.1、数据结构的分析 1.2.2、文件结构设计 2、扫雷游戏的结构分析 2.1、用…

vmware虚拟机centos8共享文件夹挂载

1.设置虚拟机共享文件夹 2. 上述设置完毕之后&#xff0c;重启进入虚拟机&#xff0c;查看出现的共享文件夹名称 vmware-hgfsclient 3.查看是否有挂载目录&#xff0c;挂在目录默认为 /mnt/hgfs。没有时可以使用以下命令创建 mkdir /mnt/hgfs 4. 手动挂载目录--只能实现一次 注…

Arduino Uno R3通过ESP-01S连接网络

一、材料准备 Arduino Uno R3开发板 1 USB串口通信数据线&#xff08;Uno开发板使用&#xff09; 1 ESP8266-01S Wi-Fi模块 1 ESP8266固件烧录下载器&#xff08;烧录固件使用&#xff09; 1 WiFi无线收发转接板&#xff08;适用于ESP-01S、ESP-01&#xff09; 杜邦线…

java设计模式:工厂模式

1&#xff1a;在平常的开发工作中&#xff0c;我们可能会用到不同的设计模式&#xff0c;合理的使用设计模式&#xff0c;可以提高开发效率&#xff0c;提高代码质量&#xff0c;提高系统的可拓展性&#xff0c;今天来简单聊聊工厂模式。 2&#xff1a;工厂模式是一种创建对象的…

如何查看某网站的谷歌流量的组成情况

在独立站跨境贸易当中&#xff0c;很多时候我们都会重复一个动作&#xff0c;那就是查看对手网站或者某一网站的流量&#xff0c;以此来分析和总结如何优化自己的站点&#xff0c;借鉴对手优秀的地方来补足自己的缺点&#xff0c;或者某些时候会模仿甚至抄袭竞品网站。那么如何…

C++ 类与对象(上)

目录 本节目标 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 8.this指针 8.1 thi…