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

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

pgx lib中的命名準備語句,它是如何工作的?

pgx lib中的命名準備語句,它是如何工作的?

Go
holdtom 2023-06-05 17:57:17
介紹數據庫/sql在 Go 標準 sql 庫中,該*Stmt類型具有如下定義的方法:func?(s?*Stmt)?Exec(args?...interface{})?(Result,?error) func?(s?*Stmt)?Query(args?...interface{})?(*Rows,?error)新的(未命名的)語句由以下人員準備:func?(db?*DB)?Prepare(query?string)?(*Stmt,?error)連接池是抽象的,不能直接訪問在單個連接上準備事務如果連接在語句執(zhí)行時不可用,它將在新連接上重新準備。pgx該PreparedStatement類型沒有定義任何方法。一個新的命名準備語句由以下人員準備:func?(p?*ConnPool)?Prepare(name,?sql?string)?(*PreparedStatement,?error)操作直接在連接池上事務在池的所有連接上準備好沒有明確的方法如何執(zhí)行準備好的語句Prepare 是冪等的;也就是說,使用相同的名稱和 sql 參數多次調用 Prepare 是安全的。這允許Prepare 和 Query/Exec/PrepareEx 的代碼路徑,而不用擔心語句是否已經準備好。小例子package mainimport (? ? "github.com/jackc/pgx")func main() {? ? conf := pgx.ConnPoolConfig{? ? ? ? ConnConfig: pgx.ConnConfig{? ? ? ? ? ? Host:? ? ?"/run/postgresql",? ? ? ? ? ? User:? ? ?"postgres",? ? ? ? ? ? Database: "test",? ? ? ? },? ? ? ? MaxConnections: 5,? ? }? ? db, err := pgx.NewConnPool(conf)? ? if err != nil {? ? ? ? panic(err)? ? }? ? _, err = db.Prepare("my-query", "select $1")? ? if err != nil {? ? ? ? panic(err)? ? }? ? // What to do with the prepared statement?}問題)該name參數給我的印象是它可以通過調用它來執(zhí)行name,但是如何呢?該文檔給人的印象是Query/Exec方法以某種方式利用了準備好的語句。但是,這些方法不接受參數name。它如何匹配它們?據推測,匹配是由查詢內容完成的。那么命名語句的意義何在?可能的答案這是我得到的結果:沒有按名稱引用查詢的方法(假設)匹配是在查詢主體上完成的conn.ExecEx()。如果還沒有準備好,將完成:ps, ok := c.preparedStatements[sql]? ? ? ? ? ? if !ok {? ? ? ? ? ? ? ? var err error? ? ? ? ? ? ? ? ps, err = c.prepareEx("", sql, nil)? ? ? ? ? ? ? ? if err != nil {? ? ? ? ? ? ? ? ? ? return "", err? ? ? ? ? ? ? ? }? ? ? ? ? ? }PosgreSQL 本身需要它來做某事(假設)。
查看完整描述

1 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

它在這里有雙重功能。如果sql變量與映射中的鍵不匹配c.preparedStatements[sql],則準備好包含在 中的查詢sql并將新*PreparedStatement結構指定給ps. 如果它確實匹配了一個鍵,ps變量將指向地圖的一個條目。


如此有效,您可以執(zhí)行以下操作:


package main


import (

? ? "fmt"


? ? "github.com/jackc/pgx"

)


func main() {

? ? conf := pgx.ConnPoolConfig{

? ? ? ? ConnConfig: pgx.ConnConfig{

? ? ? ? ? ? Host:? ? ?"/run/postgresql",

? ? ? ? ? ? User:? ? ?"postgres",

? ? ? ? ? ? Database: "test",

? ? ? ? },

? ? ? ? MaxConnections: 5,

? ? }

? ? db, err := pgx.NewConnPool(conf)

? ? if err != nil {

? ? ? ? panic(err)

? ? }

? ? if _, err := db.Prepare("my-query", "select $1::int"); err != nil {

? ? ? ? panic(err)

? ? }

? ? row := db.QueryRow("my-query", 10)

? ? var i int

? ? if err := row.Scan(&i); err != nil {

? ? ? ? panic(err)

? ? }

? ? fmt.Println(i)

}


查看完整回答
反對 回復 2023-06-05
  • 1 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號