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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將 go-pg 查詢轉(zhuǎn)換為純 sql

將 go-pg 查詢轉(zhuǎn)換為純 sql

Go
Cats萌萌 2023-07-26 13:32:03
是否可以轉(zhuǎn)換go-pg查詢err?=?db.Model(story). ????????Relation("Author"). ????????Where("story.id?=??",?story1.Id). ????????Select()變成普通的 SQL?這對(duì)于調(diào)試會(huì)有幫助。所以我可以復(fù)制這個(gè)簡(jiǎn)單的 SQL 查詢并作為字符串在 psql 客戶端中運(yùn)行。可能有某種包可以做到這一點(diǎn)?
查看完整描述

4 回答

?
蠱毒傳說(shuō)

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊

問(wèn)題:自 v10 以來(lái),沒(méi)有從 ORM 到 RAW sql 的默認(rèn)解析。


好吧,我想那已經(jīng)太晚了。也許有人(像我一樣)會(huì)在 2021 年面臨這個(gè)問(wèn)題。您可以通過(guò)以下一些步驟來(lái)解決這個(gè)問(wèn)題:

  • [x] 閱讀文檔。

  • [x] 檢查所有結(jié)構(gòu)。

  • [x] 實(shí)現(xiàn)所有方法。

解決問(wèn)題


這個(gè)解決方案是從這個(gè)問(wèn)題“分叉”出來(lái)的,但我將逐步解釋它。首先我們需要閱讀go-pg hook 的一些源代碼。正如我之前所說(shuō):我們需要檢查此文檔中的所有結(jié)構(gòu)。但我們很幸運(yùn)。只有 1 個(gè)結(jié)構(gòu)!

// QueryEvent ...

type QueryEvent struct {

? ? StartTime? time.Time

? ? DB? ? ? ? ?orm.DB

? ? Model? ? ? interface{}

? ? Query? ? ? interface{}

? ? Params? ? ?[]interface{}

? ? fmtedQuery []byte

? ? Result? ? ?Result

? ? Err? ? ? ? error


? ? Stash map[interface{}]interface{}

}

我們實(shí)際上并不需要完全實(shí)現(xiàn)這個(gè)結(jié)構(gòu)。但是當(dāng)您使用 db.AddQueryHook() (其中 db 是我們的數(shù)據(jù)庫(kù)連接上的引用,AddQueryHook() 是方法)時(shí),AddQueryHook() 會(huì)等待您這個(gè)接口:


type QueryHook interface {

? ? BeforeQuery(context.Context, *QueryEvent) (context.Context, error)

? ? AfterQuery(context.Context, *QueryEvent) error

}

所以,我們已經(jīng)閱讀了文檔,檢查了結(jié)構(gòu)。接下來(lái)會(huì)發(fā)生什么?答案很簡(jiǎn)單:

  • 實(shí)施所有方法。

說(shuō)實(shí)話,我認(rèn)為這比實(shí)際情況更難。要實(shí)現(xiàn)它,您只需要?jiǎng)?chuàng)建當(dāng)前(新的空)結(jié)構(gòu)的 2 個(gè)方法來(lái)實(shí)現(xiàn)上述方法的功能,如下所示:

  1. 創(chuàng)建空結(jié)構(gòu)?type dbLogger struct{}

  2. 從文檔添加方法:

func (d dbLogger) BeforeQuery(c context.Context, q *pg.QueryEvent) (context.Context, error) {

? ? return c, nil

}


func (d dbLogger) AfterQuery(c context.Context, q *pg.QueryEvent) error {

? ? fq, _ := q.FormattedQuery()

? ? fmt.Println(string(fq))

? ? return nil

}

我希望這對(duì)遇到此問(wèn)題的每個(gè)人都有幫助。


查看完整回答
反對(duì) 回復(fù) 2023-07-26
?
人到中年有點(diǎn)甜

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊

這在項(xiàng)目的 wiki 中列出:

如何查看該庫(kù)生成的查詢?

如何查看該庫(kù)生成的查詢?

您可以像這樣設(shè)置查詢記錄器:

type dbLogger struct { }


func (d dbLogger) BeforeQuery(c context.Context, q *pg.QueryEvent) (context.Context, error) {

? ? return c, nil

}


func (d dbLogger) AfterQuery(c context.Context, q *pg.QueryEvent) (context.Context, error) {

? ? fmt.Println(q.FormattedQuery())

? ? return c, nil

}


db := pg.Connect(&pg.Options{...})

db.AddQueryHook(dbLogger{})


查看完整回答
反對(duì) 回復(fù) 2023-07-26
?
一只萌萌小番薯

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊

我剛剛從 go-pg v7 升級(jí)到 v10,并且遇到了一個(gè)問(wèn)題,Query.AppendFormat()我用來(lái)獲取 RAW SQL 的內(nèi)容已被刪除。


在使用這篇文章中的評(píng)論獲得靈感后,我使用下面的代碼成功提取了它



import (

    "github.com/go-pg/pg/v10/orm"

)


func QueryToString(q *orm.Query) string {

    value, _ := q.AppendQuery(orm.NewFormatter(), nil)


    return string(value)

}


希望這對(duì)未來(lái)的觀眾有所幫助


查看完整回答
反對(duì) 回復(fù) 2023-07-26
?
鴻蒙傳說(shuō)

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

 //db your *pg.DB

// q your  *orm.Query = db.Model(&yourModel).




 qq := pg.QueryEvent{

            DB:        db,

            Model:     q.TableModel(),

            Query:     q,

        }

 fmt.Println(qq.FormattedQuery())

所以在你的情況下


q:= db.Model(story).

        Relation("Author").

        Where("story.id = ?", story1.Id)

fmt.Println("running SQL:")

qq := pg.QueryEvent{

                DB:        db,

                Model:     q.TableModel(),

                Query:     q,

            }

fmt.Println(qq.FormattedQuery()) 

q.Select()


查看完整回答
反對(duì) 回復(fù) 2023-07-26
  • 4 回答
  • 0 關(guān)注
  • 229 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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