第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQL Alchemy - 避免一對多關(guān)系中的遞歸

SQL Alchemy - 避免一對多關(guān)系中的遞歸

ibeautiful 2021-11-23 19:28:09
對于任何缺乏解釋以及這篇文章的長度,我提前道歉。我認為這個問題比我想象的要簡單得多。我有兩個使用一對多關(guān)系的模型。對于我的 InsightModel,我使用 json() 方法顯示以下內(nèi)容:{    name: "insightname",    start: 1,    end: 3,    podcast_id: 1,    podcast: {        name: "podcast1",        wave_data: 1,        length: 2,        host: "Hosterman",        category: "entertain",        pub_date: "11/1",        cover_art_url: "google.com"    }}對于我的 PodcastModel,json() 方法顯示以下內(nèi)容:{    name: "podcast1",    wave_data: 1,    length: 2,    host: "Hosterman",    category: "entertain",    pub_date: "11/1",    cover_art_url: "google.com",    insights: [        {            name: "insightname",            start: 1,            end: 3,            podcast_id: 1        }    ]}這按我的需要工作,但為了使其工作,我必須為每個類創(chuàng)建兩個 json() 方法,以避免在 PodcastModel 中出現(xiàn)如下所示的遞歸:{    name: "podcast1",    wave_data: 1,    length: 2,    host: "Hosterman",    category: "entertain",    pub_date: "11/1",    cover_art_url: "google.com",    insights: [        {            name: "insightname",            start: 1,            end: 3,            podcast_id: 1,            podcast: {                name: "podcast1",                wave_data: 1,                length: 2,                host: "Hosterman",                category: "entertain",                pub_date: "11/1",                cover_art_url: "google.com",            }        }    ]}我的 PodcastModel 代碼是:from db import dbfrom datetime import datetimeclass PodcastModel(db.Model):    __tablename__ = 'podcasts'    id = db.Column(db.Integer, primary_key=True)    name = db.Column(db.String(100))    wave_data = db.Column(db.Float(precision=2))    length = db.Column(db.Float(precision=2))    host = db.Column(db.String(80))    category = db.Column(db.String(80))    pub_date = db.Column(db.String(50))    cover_art_url = db.Column(db.String(200)) 如您所見,我添加了 json_no_insights() 和 json_no_podcast() 方法來防止遞歸發(fā)生。但是,我確信閱讀此代碼已經(jīng)讓您感到胃部不適,我迫切希望有更好的方式來編寫它。非常感謝您的任何見解,再次,對于這篇文章的長度或任何缺乏解釋,我深表歉意。
查看完整描述

1 回答

?
四季花海

TA貢獻1811條經(jīng)驗 獲得超5個贊

讓您的生活更輕松 - 使用棉花糖。


from marshmallow import Schema, fields

from flask import jsonify


class PodcastSchema(Schema):

    name = fields.Str()

    wave_data = fields.Float()

    length = fields.Float()

    host = fields.Str()

    category = fields.Str()

    pub_date = fields.Str()

    cover_art_url = fields.Str()

    insights = fields.Nested('InsightSchema')



class InsightSchema(Schema):

    name = fields.Str()

    start = fields.Float()

    end = fields.Float()

    podcast_id = fields.Integer()

然后像這樣簡單地轉(zhuǎn)儲你的數(shù)據(jù):


podcast_schema = PodcastSchema()  # for dict (single)

podcasts_schema = PodcastSchema(many=True)  # for list (array)

jsonify(podcast_schema.dumps(your_json)

請注意 - 中缺少podcast字段,PodcastSchema這將導致(無需調(diào)整)無限遞歸。如果您需要該字段,您可以嘗試如下操作:


class PodcastSchema(Schema):

        name = fields.Str()

        wave_data = fields.Float()

        length = fields.Float()

        host = fields.Str()

        category = fields.Str()

        pub_date = fields.Str()

        cover_art_url = fields.Str()

        # dump insights without podcast field

        insights = fields.Nested('InsightSchema', exclude=('podcast', ))


class InsightSchema(Schema):

        name = fields.Str()

        start = fields.Float()

        end = fields.Float()

        podcast = fields.Nested('PodcastSchema')


查看完整回答
反對 回復 2021-11-23
  • 1 回答
  • 0 關(guān)注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號