国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flask SQLAlchemy_Serializer ORM模型序列化

這篇具有很好參考價值的文章主要介紹了Flask SQLAlchemy_Serializer ORM模型序列化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在前后端分離項目中,經(jīng)常需要把ORM模型轉(zhuǎn)化為字典,再將字典轉(zhuǎn)化為JSON格式的字符串。在遇到sqlalchemy_serializer之前,我都是通過類似Java中的反射原理,獲取當前ORM模型的所有字段,然后寫一個to_dict方法來將字段以及他的值封裝成字典。大概的代碼如下所示:

def to_dict(self):
  return {c.name: str(getattr(self, c.name)) for c in self.__table__.columns}

這種做法雖然一定程度上方便了開發(fā),但也是帶著枷鎖跳舞,存在以下幾個弊端:

  1. 無法優(yōu)雅的排除不需要序列化的字段。

  2. 無法優(yōu)雅的序列化多表之間的關(guān)系。

直到后來我遇到了sqlalchemy_serializer,淚流滿面,這不就是我苦苦尋找的ORM模型序列化庫嗎?使用他序列化ORM模型,讓我?guī)憧纯从卸嗨?

一、安裝:

sqlalchemy-serializer已經(jīng)上架PyPi,因此通過pip命令即可安裝:

 pip install SQLAlchemy-serializer

二、基本使用:

如果想要讓某個ORM模型能被序列化,那么只需要在定義模型的時候,讓他繼承自sqlalchemy_serializer.SerializerMixin即可,示例代碼如下:

from sqlalchemy_serializer import SerializerMixin

class UserModel(db.Model, SerizlizerMixin):
    __tablename__ = "user"
    id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
    email = db.Column(db.String(50), unique=True, nullable=False)
    username = db.Column(db.String(50), nullable=False)
    password = db.Column(db.String(200), nullable=False)

SerizlizerMixin會給ORM模型添加一個to_dict方法,此時你可以通過一行代碼將ORM模型序列化成字典:

user = UserModel.query.filter(...).one()
user_dict = user.to_dict()

上述代碼中將把UsrModel中所有字段都序列化成字典。

三、排除字段:

模型中有的字段不需要被序列化,比如用戶的密碼,那么這時候可以通過設(shè)置rules參數(shù),或者only參數(shù)來指定序列化規(guī)則。比如排除password,那么可以通過如下代碼方式實現(xiàn):

user = UserModel.query.filter(...).one()
user_dict = user.to_dict(rules=('-password',))

上述代碼中在調(diào)用to_dict方法的時候,傳遞了rules參數(shù),并且設(shè)置了-password,其中的-號代表排除的意思,意思是不要序列化password。如果在絕大部分場景下都不需要某些字段,可以把這個規(guī)則寫在模型定義中,這樣所有序列化的時候,都會遵循這個序列化規(guī)則。比如:

class UserModel(db.Model, SerizlizerMixin):
    serialize_rules = ("-password", )
    __tablename__ = "user"
    id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
    email = db.Column(db.String(50), unique=True, nullable=False)
    username = db.Column(db.String(50), nullable=False)
    password = db.Column(db.String(200), nullable=False)

如果需要排除的字段太多了,我們可以通過設(shè)置serialize_only屬性來標記僅僅序列化某些字段。比如:

class UserModel(db.Model, SerizlizerMixin):
    serialize_only = ("id", "username")
    __tablename__ = "user"
    id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
    email = db.Column(db.String(50), unique=True, nullable=False)
    username = db.Column(db.String(50), nullable=False)
    password = db.Column(db.String(200), nullable=False)

上述代碼在序列化的時候,就只會序列化id和username兩個字段了。

四、遞歸序列化模型和樹:

sqlalchemy_serializer會默認序列化定義好關(guān)系的模型,比如有UserModel和PostModel兩個模型:

class UserModel(db.Model, SerizlizerMixin):
    serialize_rules = ("-posts",)
    __tablename__ = "user"
    id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
    username = db.Column(db.String(50), nullable=False)
    
class PostModel(db.Model, SerializerMixin):
    __tablename__ = "post"
    id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)
    author_id = db.Column(db.String(100), db.ForeignKey("user.id"))
    
    author = db.relationship("UserModel", backref="posts")

在序列化PostModel的時候,也會自動遞歸序列化author,并且author的值有id和username兩個字段。這里有個細節(jié)需要注意,就是UserModel必須要排除posts。因為PostModel中的author字段,通過backref給UserModel綁定了一個posts字段,如果不排除posts,那么在序列化author的時候,又會序列化posts,造成循環(huán)遞歸序列化。

五、高級用法:

基本上學(xué)會以上用法后,99%的場景都沒有問題了。如果你在使用sqlalchemy_serializer還有其他業(yè)務(wù)需求,比如格式化日期的輸出、字段扁平化等,那么可以再仔細閱讀一下sqlalchemy_serializer的官方文檔:官方文檔

項目中引用

Flask SQLAlchemy_Serializer ORM模型序列化,Flask,flask,python,后端
將登錄后數(shù)據(jù)序列化返回
Flask SQLAlchemy_Serializer ORM模型序列化,Flask,flask,python,后端
序列化后的數(shù)據(jù),此時看到的跟該用戶相關(guān)的評論,帖子也序列化了,這就會循環(huán)序列化
Flask SQLAlchemy_Serializer ORM模型序列化,Flask,flask,python,后端
可以設(shè)置僅序列化的字段
Flask SQLAlchemy_Serializer ORM模型序列化,Flask,flask,python,后端文章來源地址http://www.zghlxwxcb.cn/news/detail-592850.html

到了這里,關(guān)于Flask SQLAlchemy_Serializer ORM模型序列化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Flask從入門到放棄五(SQLAlchemy介紹與快速使用、創(chuàng)建表插入數(shù)據(jù)、Scoped_session線程安全、基本增刪查改、表模型、Flask-SQLAlchemy、Migrate的使用)

    Flask從入門到放棄五(SQLAlchemy介紹與快速使用、創(chuàng)建表插入數(shù)據(jù)、Scoped_session線程安全、基本增刪查改、表模型、Flask-SQLAlchemy、Migrate的使用)

    SQLAlchemy是一個基于Python實現(xiàn)的ORM框架。該框架建立在 DB API之上,使用關(guān)系對象映射進行數(shù)據(jù)庫操作,簡言之便是:將類和對象轉(zhuǎn)換成SQL,然后使用數(shù)據(jù)API執(zhí)行SQL并獲取執(zhí)行結(jié)果。 SQLAlchemy的組成部分有: Engine 框架的引擎 Connection Pooling 數(shù)據(jù)庫連接池 Dialect 選擇連接數(shù)據(jù)庫的

    2024年02月04日
    瀏覽(26)
  • SqlAlchemy使用教程(五) ORM API 編程入門

    SqlAlchemy使用教程(五) ORM API 編程入門

    SqlAlchemy使用教程(一) 原理與環(huán)境搭建 SqlAlchemy使用教程(二) 入門示例及編程步驟 SqlAlchemy使用教程(三) CoreAPI訪問與操作數(shù)據(jù)庫詳解 SqlAlchemy使用教程(四) MetaData 與 SQL Express Language 的使用 SqlAlchemy使用教程(五) ORM API 編程入門 前一章用SQL表達式(SQL Express)語法操作數(shù)據(jù)庫時,仍然

    2024年01月23日
    瀏覽(28)
  • python使用SQLAlchemy進行mysql的ORM操作

    現(xiàn)在很多的企業(yè)進行后端開發(fā)時,程序員在分析完業(yè)務(wù)后,會使用Java的SpringBoot或者Python的Django、Flask等網(wǎng)絡(luò)框架進行項目開發(fā)。在這些網(wǎng)絡(luò)框架業(yè)務(wù)邏輯代碼編寫的過程中,很大概率會需要使用到MySQL數(shù)據(jù)庫,但是原生的SQL語句又存在被SQL注入的風(fēng)險,而且在復(fù)雜的查詢時,

    2024年02月07日
    瀏覽(25)
  • SQLAlchemy ORM指南:簡化數(shù)據(jù)庫操作的最佳實踐

    SQLAlchemy ORM指南:簡化數(shù)據(jù)庫操作的最佳實踐

    背景: ? SQLAlchemy是一個數(shù)據(jù)庫的ORM框架,讓我們操作數(shù)據(jù)庫的時候不要再用SQL語句了,跟直接操作模型一樣。操作十分便捷,其實SQLAlchemy應(yīng)該是在Flask和Django應(yīng)用的特別多,而且在flask中已經(jīng)集成了flask_sqlalchemy ,好像是 SQLAlchemy的作者和 Flask是同一個,背景了解到這里就可

    2024年01月20日
    瀏覽(57)
  • python常用庫之數(shù)據(jù)庫orm框架之SQLAlchemy

    python常用庫之數(shù)據(jù)庫orm框架之SQLAlchemy

    官網(wǎng):https://www.sqlalchemy.org/ SQLAlchemy是一個基于Python實現(xiàn)的SQL工具包和ORM框架,提供了高層抽象來管理數(shù)據(jù)庫交互。 SQLAlchemy功能強大,可以省去很多手動管理數(shù)據(jù)庫連接、資源、事務(wù)等重復(fù)工作,讓開發(fā)者更加高效地使用數(shù)據(jù)庫。許多大型Python項目都選擇使用SQLAlchemy作為ORM框架

    2024年02月07日
    瀏覽(51)
  • SqlAlchemy使用教程(六) -- ORM 表間關(guān)系的定義與CRUD操作

    SqlAlchemy使用教程(六) -- ORM 表間關(guān)系的定義與CRUD操作

    SqlAlchemy使用教程(一) 原理與環(huán)境搭建 SqlAlchemy使用教程(二) 入門示例及編程步驟 SqlAlchemy使用教程(三) CoreAPI訪問與操作數(shù)據(jù)庫詳解 SqlAlchemy使用教程(四) MetaData 與 SQL Express Language 的使用 SqlAlchemy使用教程(五) ORM API 編程入門 本章內(nèi)容,稍微有些復(fù)雜,建議騰出2小時空閑時間,

    2024年01月23日
    瀏覽(28)
  • Python 進階(三):Python使用ORM框架SQLAlchemy操作Oracle數(shù)據(jù)庫

    Python 進階(三):Python使用ORM框架SQLAlchemy操作Oracle數(shù)據(jù)庫

    要詳細連接Oracle數(shù)據(jù)庫并使用SQLAlchemy進行操作,按照以下步驟進行配置和編寫代碼: Oracle Instant Client:Oracle 提供的客戶端庫,可用于在 Python 中連接和操作 Oracle 數(shù)據(jù)庫 訪問 Oracle 官方網(wǎng)站:前往 Oracle 官方網(wǎng)站(instant-client/winx64-64-downloads) 可能需要創(chuàng)建一個免費的 Oracle

    2024年02月11日
    瀏覽(37)
  • 【Flask】from flask_sqlalchemy import SQLAlchemy報錯

    【Flask】from flask_sqlalchemy import SQLAlchemy報錯

    在使用 flask_sqlalchemy 之前,你需要確保已經(jīng)通過 pip 安裝了 Flask-SQLAlchemy??梢酝ㄟ^以下命令安裝它: ? ?pip install Flask-SQLAlchemy Python 是區(qū)分大小寫的,確保在導(dǎo)入和使用模塊時大小寫與實際安裝的庫名稱一致。確保你在代碼中使用的是 SQLAlchemy,而不是 SQLAlchem。 正確的導(dǎo)入

    2024年02月09日
    瀏覽(14)
  • 【Flask】SQLAlchemy

    為什么使用orm 優(yōu)點 有語法提示, 省去自己拼寫SQL,保證SQL語法的正確性 orm提供方言功能(dialect, 可以轉(zhuǎn)換為多種數(shù)據(jù)庫的語法), 減少學(xué)習(xí)成本 防止sql注入攻擊 搭配數(shù)據(jù)遷移, 更新數(shù)據(jù)庫方便 面向?qū)ο? 可讀性強, 開發(fā)效率高 缺點 需要語法轉(zhuǎn)換, 效率比原生sql低 復(fù)雜的查詢往

    2024年02月13日
    瀏覽(19)
  • Flask-SQLAlchemy

    Flask-SQLAlchemy

    認識Flask-SQLAlchemy Flask-SQLAlchemy 是一個為 Flask 應(yīng)用增加 SQLAlchemy 支持的擴展。它致力于簡化在 Flask 中 SQLAlchemy 的使用。 SQLAlchemy 是目前python中最強大的 ORM框架, 功能全面, 使用簡單。 ORM優(yōu)缺點 優(yōu)點 有語法提示, 省去自己拼寫SQL,保證SQL語法的正確性 orm提供方言功能(dialect, 可

    2024年02月12日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包