sqlalchemy官网(flask-sqlalchemy 和sqlalchemy的区别)

2026-01-04 14:30:01 :0

sqlalchemy官网(flask-sqlalchemy 和sqlalchemy的区别)

其实sqlalchemy官网的问题并不复杂,但是又很多的朋友都不太了解flask-sqlalchemy 和sqlalchemy的区别,因此呢,今天小编就来为大家分享sqlalchemy官网的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

flask-sqlalchemy 和sqlalchemy的区别

flask-sqlalchemy把它的执行上下文绑定在了flask的app的context上。
但sqlalchemy本身提供了scoped_session.
如果把一个线程看成一个目录,那么其下有app.context栈和sqlalchemy.scoped_session2个资源。
现在他的实现,把sqlalchemy.scoped_session的资源放在了app.context栈下。
如果需要自己起个worker线程来处理redis的消息并写入数据库,那么flask-sqlalchemy的db对象就没有办法在自己的线程里执行了。
《a target="_blank" href="mailto:%E7%9B%B8%E5%8F%8D%E5%A6%82%E6%9E%9C%E6%8A%8Adb%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%92%8Capp%E7%9A%84context%E8%84%B1%E7%A6%BB%E5%BC%80%E6%9D%A5%EF%BC%8C%E5%B0%B1%E7%81%B5%E6%B4%BB%E5%A4%9A%E4%BA%86%E3%80%82%E5%8F%8D%E6%AD%A3%E5%8F%AA%E8%A6%81%E6%B3%A8%E5%86%8C%E4%B8%80%E4%B8%8B@《a href=" member="" app"="" style="color: rgb(119, 128, 135); text-decoration: none; word-break: break-all; font-family: ’Helvetica Neue’, ’Luxi Sans’, ’DejaVu Sans’, Tahoma, ’Hiragino Sans GB’, ’Microsoft Yahei’, sans-serif; line-height: 22.4px; white-space: normal; background-color: rgb(255, 255, 255);"》app.xn--teardown_appcontext,session-8x78c.xn--remove()ok-3m3p752k."》相反如果把db的实现和app的context脱离开来,就灵活多了。反正只要注册一下@app.teardown_appcontext,把session.remove()就ok了。

sqlalchemy 里的 session 具体有什么作用

官网有写,不过看的不是很懂。
大致意思是Session用于创建程序与数据库之间的会话,并将这个会话以python的面向对象方式(“holding zone”)进行包装,提供给python其他程序调用。
Session提供一个进行数据库查询(query)的入口,python程序通过Session实例,可以对正在连接的数据库进行查询(查询结果是一个面向对象实例),将修改的内容(一般是修改面向对象实例,然后通过Session将修改的实例与数据库中特定数据“同步”。)
Session中有一个很重要的理念“Identity Map”。Session查询的结果实例,我们修改过的实例,和数据库中的数据是怎么关联起来的呢?就是靠“Identity Map”,每个实例都具有“Identity Map”记录,每个“Identity Map”都和数据行的主键(primary key)一一对应。
(这是我的渣英语翻译+个人理解写的。有不对的地方,欢迎大神指点)
官网内容:
In the most general sense, the Session establishes all conversations with the database and represents a “holding zone” for all the objects which you’ve loaded or associated with it during its lifespan. It provides the entrypoint to acquire a Query object, which sends queries to the database using the Session object’s current database connection, populating result rows into objects that are then stored in the Session, inside a structure called the Identity Map - a data structure that maintains unique copies of each object, where “unique” means “only one object with a particular primary key”.
***隐藏网址***

从Flask到FastApi

上次我们已经拿到了FastApi体验卡,并且搭建了一个demo服务。说好的要开始学 FastApi ,那怎么能从入门到放弃呢?

所以我稍稍看了一下文档,理了一下他里面的门路。所以这篇文章可以算是私货吧,由官方文档加上个人理解组成。我打算先完善比较重要的功能,剩下的到用到的时候再 切换 就行了。

为了方便大家能从Flask无缝切换到 FastApi ,我也经过一定的实践,结合自己的项目特意编写了这篇文章,可能有些地方没有考虑到,希望大家见谅。文章有点点长,可以不用一口气看完~留着后面啃也可以!

我们之前会给Flask的 app (pity)初始化一个配置:

其实配置 还有 一种用法,就是直接引入Config类,利用Config.字段去获取配置项,所以我们在原项目里面取配置的方法都要修改。

Flask 支持跨域 很简单,引入CORS,将app套进去即可。

其实FastApi也不难,其中官网就有对应的例子:

通过引入FastApi自己封装好的CORSMiddleware,即可达到一样的效果。

因为按照我们上一篇的内容,我们通过 uvicorn 启动了FastApi服务,但是由于我们是在终端(Terminal)运行的,所以其实打的 断点 是无法起作用的,所以我们需要通过运行main.py来达到调试的目的,官网也有类似的教程。

首先导入uvicorn库,然后通过uvicorn.run来运行对应的 app ,我经常提到的app,其实是一个FastApi的实例的概念。虽然我给他取名叫 pity ,但是我有时候也会叫他 app ,希望不要给大家带来困扰。

注意,我这边run方法接受了4个参数,host和port就不多说了,dddd。

reload呢,就是热更新的意思。

至于app=’main:pity’,main代表的是这个文件的名字: main.py,pity也就是app的名字。 main:pity 即代表当前要启动的是main里面的pity。

至于为什么要这么复杂,归根结底还是这个 reload 参数,为了能热更新,它需要这些信息,不然会报错:

所以,都是被逼的。

其实这个不太属于这块内容,因为有的人甚至没有用到这个模块。

用sqlalchemy的同学可以跳过哦!

其实解决方法呢,就是换成sqlalchemy。所以我们需要按照sqlalchemy的格式去编写ORM。

可以看到我这边读取链接URL,是通过Config来直接获取的。

构造函数可不变,Use类继承的对象就是models/ init .py里面的Base类,需要注意的是: sqlalchemy需要 tablename 这样一个字段,所以我们需要给它加上, 它不会默认生成,不加就报错 。其他地方基本上没有差异。

以 注册用户 为例,改写方法是去掉以前的 User.query.filter_by() ,改为 session.query(User).filter_by() ,其他的时候差距不大。

注意为什么要用 with ,因为with执行完毕之后会自动调用 exit (),也就是会自动 关闭session 。

FastApi呢,和Pydantic进行了强强结合,虽然这一块我还摸得不是很清楚,不过我暂时可以用起来了。

先看下旧版本的, 人肉校验器 :

新版本的话,等于说是把参数校验和业务逻辑 解耦 了,参数校验放到另外的地方去编写,接口里面只负责处理业务逻辑即可。

新版本接口:

一切的核心都在于这个 UserDto

可以看到,我们为UserDto类指定了4个字段,因为都是 必填项 ,所以未加上默认值,如果我们需要email是 非必填 的,则要改成:

接着就是具体的校验方法了,由于我们的校验规则很简单,所以对 所有字段 都是采取的一个方法: field_not_empty

意思是字段不能为空字符串,否则抛出ParamsError,注意这个 ParamsError 是我自定义的错误类型,它继承了ValueError。

但是这个字段呢,是pydantic帮忙校验好的,所以我们需要添加这么一个方法:

这个方法是针对请求参数校验失败的处理,类似于一个hook,只有请求参数校验失败了,才会走到这个步骤。虽然里面错误信息多,但是我们只取第一条错误信息,不然数据多了展示不方便。

接着我们定义了一个错误字典,目前支持 missing , params (自己封装的), not_allowed (参数类型不一致)

这样就完成了参数的校验了!

***隐藏网址***

APIRouter约等于Blueprint,创建一个APIRouter实例,prefix即url的前缀。

编写接口的时候从@app.route改为@router.post/get即可,变化不大。

由于我这里只改造了user下的router,所以其他的未include进来。

关于本次sqlalchemy官网和flask-sqlalchemy 和sqlalchemy的区别的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

sqlalchemy官网(flask-sqlalchemy 和sqlalchemy的区别)

本文编辑:admin

更多文章:


进制转换的8421法(十进制如何转换成8421码~~请说方法)

进制转换的8421法(十进制如何转换成8421码~~请说方法)

大家好,进制转换的8421法相信很多的网友都不是很明白,包括十进制如何转换成8421码~~请说方法也是一样,不过没有关系,接下来就来为大家分享关于进制转换的8421法和十进制如何转换成8421码~~请说方法的一些知识点,大家可以关注收藏,免

2026年5月11日 00:45

线程和进程的区别是什么 面试(linux进程和线程的区别 面试)

线程和进程的区别是什么 面试(linux进程和线程的区别 面试)

各位老铁们好,相信很多人对线程和进程的区别是什么 面试都不是特别的了解,因此呢,今天就来为大家分享下关于线程和进程的区别是什么 面试以及linux进程和线程的区别 面试的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文

2026年1月20日 03:15

rabbitmq最新版本(rabbitmq3.8.2安装步骤及集群配置)

rabbitmq最新版本(rabbitmq3.8.2安装步骤及集群配置)

今天给各位分享rabbitmq3.8.2安装步骤及集群配置的知识,其中也会对rabbitmq3.8.2安装步骤及集群配置进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录rabbitmq3.8.2安装步骤及集群配

2025年11月21日 11:00

易语言源码打开停止工作(同样一个易语言源码,为什么在我的电脑上运行就卡死,在别人的电脑上运行是正常的)

易语言源码打开停止工作(同样一个易语言源码,为什么在我的电脑上运行就卡死,在别人的电脑上运行是正常的)

其实易语言源码打开停止工作的问题并不复杂,但是又很多的朋友都不太了解同样一个易语言源码,为什么在我的电脑上运行就卡死,在别人的电脑上运行是正常的,因此呢,今天小编就来为大家分享易语言源码打开停止工作的一些知识,希望可以帮助到大家,下面我们一

2026年5月15日 01:30

powershell快捷键打开(windows10的控制面板在哪里找)

powershell快捷键打开(windows10的控制面板在哪里找)

本篇文章给大家谈谈powershell快捷键打开,以及windows10的控制面板在哪里找对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录w

2026年8月7日 07:15

oracle数据库完整性(oracle添加记录的时候提示违反完整性约束,未找到父项关键字怎么解决)

oracle数据库完整性(oracle添加记录的时候提示违反完整性约束,未找到父项关键字怎么解决)

各位老铁们,大家好,今天由我来为大家分享oracle数据库完整性,以及oracle添加记录的时候提示违反完整性约束,未找到父项关键字怎么解决的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力

2025年10月15日 22:30

java找不到工作想去送快递了(昌平北大青鸟分享学Java找不到工作的原因)

java找不到工作想去送快递了(昌平北大青鸟分享学Java找不到工作的原因)

今天给各位分享昌平北大青鸟分享学Java找不到工作的原因的知识,其中也会对昌平北大青鸟分享学Java找不到工作的原因进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录昌平北大青鸟分享学Java找不到工作的原因ja

2026年8月6日 10:45

后台管理系统模板如何使用(开源网店iWeb Shop的模板管理后台怎么操作有什么值得注意的地方)

后台管理系统模板如何使用(开源网店iWeb Shop的模板管理后台怎么操作有什么值得注意的地方)

这篇文章给大家聊聊关于后台管理系统模板如何使用,以及开源网店iWeb Shop的模板管理后台怎么操作有什么值得注意的地方对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录开源网店iWeb Shop的模板管理后台怎么操作有什么值得

2025年10月30日 18:15

高级程序设计语言的主要功能(高级语言的控制结构主要包含什么)

高级程序设计语言的主要功能(高级语言的控制结构主要包含什么)

“高级程序设计语言的主要功能”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看高级程序设计语言的主要功能(高级语言的控制结构主要包含什么)!本文目录高级语言的控制结构主要包含什么用高级程序设计语言编写的程序可读性好,是因为什么

2025年12月8日 19:00

mapreduce的优势(hadoop与传统的关系型数据库(如oracle)相比,有什么优势及劣势)

mapreduce的优势(hadoop与传统的关系型数据库(如oracle)相比,有什么优势及劣势)

大家好,mapreduce的优势相信很多的网友都不是很明白,包括hadoop与传统的关系型数据库(如oracle)相比,有什么优势及劣势也是一样,不过没有关系,接下来就来为大家分享关于mapreduce的优势和hadoop与传统的关系型数据

2026年2月12日 15:00

安卓入门开发(安卓如何 初学者必备的安卓入门指南)

安卓入门开发(安卓如何 初学者必备的安卓入门指南)

今天给各位分享安卓如何 初学者必备的安卓入门指南的知识,其中也会对安卓如何 初学者必备的安卓入门指南进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录安卓如何 初学者必备的安卓入门指南安卓程序开发入门Androi

2025年7月29日 11:15

java交互界面怎么做(北大青鸟java培训:常见交互设计表现形式)

java交互界面怎么做(北大青鸟java培训:常见交互设计表现形式)

大家好,java交互界面怎么做相信很多的网友都不是很明白,包括北大青鸟java培训:常见交互设计表现形式也是一样,不过没有关系,接下来就来为大家分享关于java交互界面怎么做和北大青鸟java培训:常见交互设计表现形式的一些知识点,大家可以

2026年3月23日 04:00

18是什么意思?未满18岁者请勿进入 什么意思

18是什么意思?未满18岁者请勿进入 什么意思

“18”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看18是什么意思?未满18岁者请勿进入 什么意思!本文目录18是什么意思未满18岁者请勿进入 什么意思18是什么意思18这个数字代表:成年、青春。18这个数字代表的含义:十

2026年3月15日 00:15

pull together(pull together是什么意思)

pull together(pull together是什么意思)

各位老铁们,大家好,今天由我来为大家分享pull together,以及pull together是什么意思的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年1月6日 13:30

substantial变形单词(哪些英语单词可以表达 “重要的” 以及它们的区别)

substantial变形单词(哪些英语单词可以表达 “重要的” 以及它们的区别)

这篇文章给大家聊聊关于substantial变形单词,以及哪些英语单词可以表达 “重要的” 以及它们的区别对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录哪些英语单词可以表达 “重要的” 以及它们的区别高中英语选择性必修二单词

2026年1月13日 17:00

持续集成框架(jmeter持续集成为什么要用ant)

持续集成框架(jmeter持续集成为什么要用ant)

各位老铁们好,相信很多人对持续集成框架都不是特别的了解,因此呢,今天就来为大家分享下关于持续集成框架以及jmeter持续集成为什么要用ant的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录jmeter持续集成为什

2025年6月22日 22:15

floor和ceil函数(Math之ceil、floor、round区别)

floor和ceil函数(Math之ceil、floor、round区别)

其实floor和ceil函数的问题并不复杂,但是又很多的朋友都不太了解Math之ceil、floor、round区别,因此呢,今天小编就来为大家分享floor和ceil函数的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年1月22日 22:30

汉化版eclipse(在汉化版eclipse中编写java程序,无法解析start是什么意思)

汉化版eclipse(在汉化版eclipse中编写java程序,无法解析start是什么意思)

各位老铁们好,相信很多人对汉化版eclipse都不是特别的了解,因此呢,今天就来为大家分享下关于汉化版eclipse以及在汉化版eclipse中编写java程序,无法解析start是什么意思的问题知识,还望可以帮助大家,解决大家的一些困惑,

2025年8月6日 22:30

interesting怎么读英语(“interesting”怎么读)

interesting怎么读英语(“interesting”怎么读)

其实interesting怎么读英语的问题并不复杂,但是又很多的朋友都不太了解“interesting”怎么读,因此呢,今天小编就来为大家分享interesting怎么读英语的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧

2026年5月11日 15:45

程序设计语言从机器语言到高级语言的抽象(高级语言的好处)

程序设计语言从机器语言到高级语言的抽象(高级语言的好处)

大家好,程序设计语言从机器语言到高级语言的抽象相信很多的网友都不是很明白,包括高级语言的好处也是一样,不过没有关系,接下来就来为大家分享关于程序设计语言从机器语言到高级语言的抽象和高级语言的好处的一些知识点,大家可以关注收藏,免得下次来找不

2025年11月7日 12:45

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索