SQLAlchemy 第三篇

使用insert语句

from sqlalchemy import Table, Column, Integer, String, MetaDatametadata_obj = MetaData()
user_table = Table("user_account",metadata_obj,Column("id", Integer, primary_key=True),Column("name", String(255)),Column("fullname", String(255)),
)
from sqlalchemy import insert
stmt = insert(user_table).values(name="new user", fullname="New User Name")
print(stmt)
compiled = stmt.compile()
compiled.params
INSERT INTO user_account (name, fullname) VALUES (:name, :fullname){'name': 'new user', 'fullname': 'New User Name'}

执行语句

from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:root@localhost/test?charset=utf8mb4",echo=True,echo_pool=True,pool_size=20)
with engine.connect() as conn:result = conn.execute(stmt)conn.commit()
2023-12-14 13:54:07,384 INFO sqlalchemy.engine.Engine SELECT DATABASE()
2023-12-14 13:54:07,385 INFO sqlalchemy.engine.Engine [raw sql] {}
2023-12-14 13:54:07,386 INFO sqlalchemy.engine.Engine SELECT @@sql_mode
2023-12-14 13:54:07,387 INFO sqlalchemy.engine.Engine [raw sql] {}
2023-12-14 13:54:07,387 INFO sqlalchemy.engine.Engine SELECT @@lower_case_table_names
2023-12-14 13:54:07,388 INFO sqlalchemy.engine.Engine [raw sql] {}
2023-12-14 13:54:07,390 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-12-14 13:54:07,391 INFO sqlalchemy.engine.Engine INSERT INTO user_account (name, fullname) VALUES (%(name)s, %(fullname)s)
2023-12-14 13:54:07,392 INFO sqlalchemy.engine.Engine [generated in 0.00121s] {'name': 'new user', 'fullname': 'New User Name'}
2023-12-14 13:54:07,392 INFO sqlalchemy.engine.Engine COMMIT

插入多条

with engine.connect() as conn:result = conn.execute(insert(user_table),[{"name": "user1", "fullname": "User One"},{"name": "user2", "fullname": "User Two"},])conn.commit()
2023-12-14 14:05:54,902 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-12-14 14:05:54,904 INFO sqlalchemy.engine.Engine INSERT INTO user_account (name, fullname) VALUES (%(name)s, %(fullname)s)
2023-12-14 14:05:54,904 INFO sqlalchemy.engine.Engine [cached since 92.92s ago] [{'name': 'user1', 'fullname': 'User One'}, {'name': 'user2', 'fullname': 'User Two'}]
2023-12-14 14:05:54,906 INFO sqlalchemy.engine.Engine COMMIT
# 查询SELECT
from sqlalchemy import select
stmt = select(user_table).where(user_table.c.name == "user1")
print(stmt)
SELECT user_account.id, user_account.name, user_account.fullname 
FROM user_account 
WHERE user_account.name = :name_1
from sqlalchemy.orm import Session
with Session(engine) as conn:result = conn.execute(stmt)for row in result:print(row)
2023-12-14 14:10:13,515 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-12-14 14:10:13,517 INFO sqlalchemy.engine.Engine SELECT user_account.id, user_account.name, user_account.fullname 
FROM user_account 
WHERE user_account.name = %(name_1)s
2023-12-14 14:10:13,519 INFO sqlalchemy.engine.Engine [cached since 82.49s ago] {'name_1': 'user1'}
(2, 'user1', 'User One')
(4, 'user1', 'User One')
(8, 'user1', 'User One')
2023-12-14 14:10:13,521 INFO sqlalchemy.engine.Engine ROLLBACK

指定查询字段column

print(select(user_table.c.name,user_table.c.id))
SELECT user_account.name, user_account.id 
FROM user_account
from typing import List, Optional
from sqlalchemy.orm import Mapped, mapped_column, relationshipfrom sqlalchemy.orm import DeclarativeBaseclass Base(DeclarativeBase):passclass User(Base):__tablename__ = "user_account"id: Mapped[int] = mapped_column(primary_key=True)name: Mapped[str] = mapped_column(String(20))fullname: Mapped[Optional[str]]def __repr__(self) -> str:return f"User(id={self.id},name={self.name})"with Session(engine) as conn:result = conn.execute(select(User.id,User.name)).first()print(result)
2023-12-14 14:22:09,242 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-12-14 14:22:09,244 INFO sqlalchemy.engine.Engine SELECT user_account.id, user_account.name 
FROM user_account
2023-12-14 14:22:09,246 INFO sqlalchemy.engine.Engine [generated in 0.00123s] {}
(1, 'new user')
2023-12-14 14:22:09,248 INFO sqlalchemy.engine.Engine ROLLBACK

字段别名

stmt = select(("tmpName:"+user_table.c.name).label("realname")).order_by(user_table.c.id)
with engine.connect() as conn:for row in conn.execute(stmt):print(row.realname)
2023-12-14 14:31:05,943 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-12-14 14:31:05,944 INFO sqlalchemy.engine.Engine SELECT concat(%(name_1)s, user_account.name) AS realname 
FROM user_account ORDER BY user_account.id
2023-12-14 14:31:05,945 INFO sqlalchemy.engine.Engine [cached since 43.98s ago] {'name_1': 'tmpName:'}
tmpName:new user
tmpName:user1
tmpName:user2
tmpName:user1
tmpName:user2
tmpName:user1
tmpName:user2
2023-12-14 14:31:05,947 INFO sqlalchemy.engine.Engine ROLLBACK
## 字段表达式
from sqlalchemy import text
stmt = select(user_table.c.id,text("id+100"),text("'id+100'"),)
with engine.connect() as conn:result = conn.execute(stmt)for row in result:print(row)
2023-12-14 14:34:46,915 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-12-14 14:34:46,916 INFO sqlalchemy.engine.Engine SELECT user_account.id, id+100, 'id+100' 
FROM user_account
2023-12-14 14:34:46,917 INFO sqlalchemy.engine.Engine [generated in 0.00169s] {}
(1, 101, 'id+100')
(2, 102, 'id+100')
(3, 103, 'id+100')
(4, 104, 'id+100')
(5, 105, 'id+100')
(8, 108, 'id+100')
(9, 109, 'id+100')
2023-12-14 14:34:46,919 INFO sqlalchemy.engine.Engine ROLLBACK

使用orm进行增删改查

增加

squidward = User(name="squidward", fullname="Squidward Tentacles")
krabs = User(name="ehkrabs", fullname="Eugene H. Krabs")
with Session(engine) as session:session.add(squidward)session.add(krabs)session.commit()print("*"*50)# 自动生成的主键属性print(squidward.id)print(krabs.id)
2023-12-14 16:57:42,724 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-12-14 16:57:42,725 INFO sqlalchemy.engine.Engine INSERT INTO user_account (name, fullname) VALUES (%(name)s, %(fullname)s)
2023-12-14 16:57:42,726 INFO sqlalchemy.engine.Engine [cached since 261.2s ago] {'name': 'squidward', 'fullname': 'Squidward Tentacles'}
2023-12-14 16:57:42,728 INFO sqlalchemy.engine.Engine INSERT INTO user_account (name, fullname) VALUES (%(name)s, %(fullname)s)
2023-12-14 16:57:42,728 INFO sqlalchemy.engine.Engine [cached since 261.2s ago] {'name': 'ehkrabs', 'fullname': 'Eugene H. Krabs'}
2023-12-14 16:57:42,730 INFO sqlalchemy.engine.Engine COMMIT
**************************************************
2023-12-14 16:57:42,732 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-12-14 16:57:42,733 INFO sqlalchemy.engine.Engine SELECT user_account.id AS user_account_id, user_account.name AS user_account_name, user_account.fullname AS user_account_fullname 
FROM user_account 
WHERE user_account.id = %(pk_1)s
2023-12-14 16:57:42,733 INFO sqlalchemy.engine.Engine [cached since 84.44s ago] {'pk_1': 26}
26
2023-12-14 16:57:42,735 INFO sqlalchemy.engine.Engine SELECT user_account.id AS user_account_id, user_account.name AS user_account_name, user_account.fullname AS user_account_fullname 
FROM user_account 
WHERE user_account.id = %(pk_1)s
2023-12-14 16:57:42,736 INFO sqlalchemy.engine.Engine [cached since 84.44s ago] {'pk_1': 27}
27
2023-12-14 16:57:42,737 INFO sqlalchemy.engine.Engine ROLLBACK

删除

session = Session(engine)
patrick = session.get(User, 3)
session.delete(patrick)
session.commit()
2023-12-14 17:01:14,641 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-12-14 17:01:14,642 INFO sqlalchemy.engine.Engine SELECT user_account.id AS user_account_id, user_account.name AS user_account_name, user_account.fullname AS user_account_fullname 
FROM user_account 
WHERE user_account.id = %(pk_1)s
2023-12-14 17:01:14,642 INFO sqlalchemy.engine.Engine [cached since 39.91s ago] {'pk_1': 3}
2023-12-14 17:01:14,646 INFO sqlalchemy.engine.Engine DELETE FROM user_account WHERE user_account.id = %(id)s
2023-12-14 17:01:14,647 INFO sqlalchemy.engine.Engine [generated in 0.00076s] {'id': 3}
2023-12-14 17:01:14,650 INFO sqlalchemy.engine.Engine COMMIT
from sqlalchemy import delete
stmt = delete(User).where(User.name.in_(["squidward", "sandy"]))
session.execute(stmt)
session.commit()
2023-12-14 17:04:21,096 INFO sqlalchemy.engine.Engine DELETE FROM user_account WHERE user_account.name IN (%(name_1_1)s, %(name_1_2)s)
2023-12-14 17:04:21,098 INFO sqlalchemy.engine.Engine [cached since 15.71s ago] {'name_1_1': 'squidward', 'name_1_2': 'sandy'}
2023-12-14 17:04:21,099 INFO sqlalchemy.engine.Engine COMMIT

修改

from sqlalchemy import update
stmt = (update(User).where(User.name.in_(["squidward", "sandy"])).values(fullname="Name starts with S")
)
session.execute(stmt)
session.commit()    
2023-12-14 17:04:58,832 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-12-14 17:04:58,835 INFO sqlalchemy.engine.Engine UPDATE user_account SET fullname=%(fullname)s WHERE user_account.name IN (%(name_1_1)s, %(name_1_2)s)
2023-12-14 17:04:58,836 INFO sqlalchemy.engine.Engine [generated in 0.00123s] {'fullname': 'Name starts with S', 'name_1_1': 'squidward', 'name_1_2': 'sandy'}
2023-12-14 17:04:58,840 INFO sqlalchemy.engine.Engine COMMIT

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

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

相关文章

java-sec-code的xss

java-sec-code 用于学习java漏洞代码 环境部署 直接在idea中使用git 运行即可 RequestMapping("/reflect") ResponseBody public static String reflect(String xss) {return xss;}当用户访问到/reflect URL地址时,程序会自动调用reflect方法&#xff0c…

『踩坑记录』IDEA Spring initialzr新建Spring项目不能选择jdk8的解决方法

问题描述 Spring initializr新建Spring项目不能选低版本java 解决方法 默认官方start.spring.io已不支持自动生成低版本jkd的Spring项目,自定义用阿里云的starter即可 用阿里云的就能支持低版本jdk了 完 欢迎关注我的CSDN博客 :Ho1aAs 版权属于&a…

Tekton 基于 gitlab 触发流水线

Tekton 基于 gitlab 触发流水线 Tekton EventListener 在8080端口监听事件,Gitlab 提交代码产生push 事件,gitlab webhook触发tekton流水线执行。 前置要求: kubernetes集群中已部署 tekton pipeline、tekton triggers以及tekton dashboa…

SpringMVC的文件上传、多文件上传

概念:上传/下载应用 对于上传功能,我们在项目中是经常会用到的,比如用户注册的时候,上传用户头像,这个时候就会使用到上传的功能。而对于下载,使用场景也很常见,比如我们项目中有个使用说明是是…

【Spring】04 国际化

文章目录 1. 定义2. Spring 的支持1) MessageSource接口2) ResourceBundleMessageSource 3. 配置国际化1)配置MessageSource Bean2)创建资源文件3)在Bean中使用国际化消息 4. 使用占位符和参数结语 Spring 为我们提供了…

Mybatis-Plus同时实现分表和表内多租户模式

在之前经理的某家公司中,经历了一个saas服务的某些功能的数据量不断变大的过程,因为各种功能和性能的原因想到的方法就是直接按saas租户做分库和按租户对某些数据量大的表做分表。但是在我离职之前这两种方式都未能实现。不过,最近刚好看到My…

遇到运维故障,有没有排查和解决故障的正确流程?

稳定是偶然,异常才是常态,用来标注IT运维工作再适合不过。 因为对于IT运维来说,工作最常遇到的就是不稳定性带来的各种故障,经常围绕发现故障、响应故障、定位故障、恢复故障这四大步。 故障处理是最心跳的事情,没有…

XETUX软件 dynamiccontent.properties.xhtml RCE漏洞复现

0x01 产品简介 XETUX 是一个全面的解决方案,包括一套安全、强大和可监控的软件程序,专为自动控制餐厅和零售而设计和开发。 0x02 漏洞概述 XETUX 存在代码执行漏洞,攻击者可通过 dynamiccontent.properties.xhtml 执行任意代码获取服务器权限。 0x03 复现环境 FOFA:ti…

Linux kernel 协议栈与高速网络

都知道 linux kernel 无力处理高速网络,但各种 offloading 方案也不全对,所以到底为什么 linux kernel 对高速网络无力。 中断,锁,上下文切换,内存拷贝这些经理都够得着的视野就别烦世人皆俯视了。本文给出另一个视角…

SQL进阶理论篇(四):索引的结构原理(B树与B+树)

文章目录 简介如何评价索引的数据结构设计好坏二叉树的局限性什么是B树什么是B树总结参考文献 简介 我们在上一节中说过,索引其实是一种数据结构,那它到底是一种什么样的数据结构呢?本节将简单介绍一下几个问题: 什么样的数据结…

<JavaEE> 网络编程 -- 网络通信基础(协议和协议分层、数据封装和分用)

目录 一、IP地址 1)IP地址的概念 2)IP地址的格式 二、端口号 1)端口号的概念 2)端口号的格式 3)什么是知名端口号? 三、协议 1)协议的概念 2)协议的作用 3)TC…

[笔记] iperf3.1.3源码下载与交叉编译

由于需要测试一款40G网卡,下载了 iperf3.1.3 用于性能测试。 iperf3.1.3 源码下载 可以在 iperf 官网 下载源代码: 交叉编译 需要运行在 aarch64 linux 环境下,所以需要交叉编译。 进入iperf3 目录下,运行 ./configure 脚本…

ssm基于HTML5的OA办公系统论文

基于HTML5的OA办公系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,作为一个一般的企业都开始注重与自己的信息展示平台,实现基于HTML5的OA办公系统在技术上已成熟。本文介绍了基于HTML5的OA办公系统的开发全过程。通过分析企业对于博客网站的需…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion 模特假人换服装、换背景、换真人

给固定人物换背景或者换服装,需要用到一个Stable Diffusion扩展插件,就是sd-webui-segment-anything。 sd-webui-segment-anything 不仅可以做到抠图的效果,也能实现之多蒙版的效果。 什么是蒙版 图片蒙版是一种用于调节图像修改程度以及进行局部调整的工具。它通常分为四种…

安全算法(二):共享密钥加密、公开密钥加密、混合加密和迪菲-赫尔曼密钥交换

安全算法(二):共享密钥加密、公开密钥加密、混合加密和迪菲-赫尔曼密钥交换 本章介绍了共享密钥加密、公开密钥加密,和两种加密方法混合使用的混合加密方法;最后介绍了迪菲-赫尔曼密钥交换。 加密数据的方法可以分为…

16--常用类和基础API--06

1、包装类 1.1 包装类概述 Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作&#xff0c…

Gitlab基础篇: Gitlab docker 安装部署、Gitlab 设置账号密码

文章目录 1、环境准备2、配置1)、初始化2)、修改gitlab配置文件3)、修改docker配置的gitlab默认端口 gitlab进阶配置gitlab 设置账号密码 1、环境准备 安装docker gitlab前确保docker环境,如果没有搭建docker请查阅“Linux docker 安装文档” docker 下载 gitlab容…

STM32 PVD掉电检测功能的使用方法

STM32 PVD掉电检测功能的使用方法 前言 在实际应用场景中,可能会出现设备电源电压异常下降或掉电的情况,因此,有时候需要检测设备是否掉电,或者在设备掉电的瞬间做一些紧急关机处理,比如保存重要的用户数据&#xff…

【C语言】超详解strncpystrncatstrncmpstrerrorperror的使⽤和模拟实现

🌈write in front :🔍个人主页 : 啊森要自信的主页 ✏️真正相信奇迹的家伙,本身和奇迹一样了不起啊! 欢迎大家关注🔍点赞👍收藏⭐️留言📝>希望看完我的文章对你有小小的帮助&am…

jmeter,跨线程调用cookie

结构目录 一、线程组1 1、创建登录的【HTTP请求】,并配置接口所需参数; 2、创建【正则表达式提取器】,用正则表达式提取cookie字段; 3、创建【调试取样器】,便于观察第2步提取出的数据; 4、创建【BeanSh…