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

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

sql:預(yù)期有 8 個參數(shù),使用 `preparex` 和 `context.context`

sql:預(yù)期有 8 個參數(shù),使用 `preparex` 和 `context.context`

Go
狐的傳說 2022-12-19 19:26:29
我的問題與那個無關(guān)。我的問題主要是關(guān)于preparexand ctx。我已經(jīng)完成了使用的實(shí)現(xiàn)db.NamedExec,我的代碼正在為這些工作。我在這里試圖做的是理解context.context和preparex。使用這兩個實(shí)現(xiàn)。代碼片段:模型.gotype User struct {    ID        int       `db:"id" json:"id"`    CreatedAt time.Time `db:"created_at" json:"created_at"`    UpdatedAt time.Time `db:"updated_at" json:"updated_at"`    DeletedAt time.Time `db:"deleted_at" json:"deleted_at"`    Username  string    `db:"username" json:"username"`    Password  string    `db:"password" json:"password"`    FirstName string    `db:"first_name" json:"first_name"`    LastName  string    `db:"last_name" json:"last_name"`    Phone     string    `db:"phone" json:"phone"`    Status bool         `db:"status" json:"status"`    Addrs  []UserAddress}詢問:queryInsertUserData = `    INSERT INTO users (id, created_at, updated_at, deleted_at, username, password, first_name, last_name, phone, status) VALUES($1, now(), now(), $2, $3, $4, $5, $6, $7, $8)`type queries struct {    insertUserData,     insertAddrData *sqlx.Stmt}//prepareStatement is a method for preparing sqlx statementfunc (queries *queries) prepareStatement(db *sqlx.DB, query string) (*sqlx.Stmt, error) {    stmt, err := db.Preparex(query) //https://go.dev/doc/database/prepared-statements    if err != nil {        return nil, err    }    return stmt, err}constructUserData, err := queries.prepareStatement(db, queryInsertUserData)queries.insertUserData = constructUserData執(zhí)行:// Insert User datafunc (postgres *Postgres) InsertUserData(ctx context.Context) (*entity.User, error) {    c := entity.User{}    err := postgres.queries.insertUserData.SelectContext(ctx, &c) //<---here    if err != nil {        return nil, err    }    return &c, nil}我的 ctx 是:ctx = context.WithValue(ctx, "ID", 1)ctx = context.WithValue(ctx, "Username", "John")ctx = context.WithValue(ctx, "Password", "pass")當(dāng)我經(jīng)過postgres.queries.insertUserData.SelectContext(ctx, &c)我正進(jìn)入(狀態(tài):sql: expected 8 arguments, got 0為什么它說得了0?誰能幫我這個?如何傳遞 ctx 并提供插入查詢值?
查看完整描述

2 回答

?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個贊

我沒有得到你的代碼的結(jié)構(gòu),但從主要上下文(插入查詢)你應(yīng)該做這樣的事情:


package main


import (

    "context"

    "database/sql"

    "log"

)


var db *sql.DB

type User struct {

    ID        int       `db:"id" json:"id"`

    CreatedAt time.Time `db:"created_at" json:"created_at"`

    UpdatedAt time.Time `db:"updated_at" json:"updated_at"`

    DeletedAt time.Time `db:"deleted_at" json:"deleted_at"`

    Username  string    `db:"username" json:"username"`

    Password  string    `db:"password" json:"password"`

    FirstName string    `db:"first_name" json:"first_name"`

    LastName  string    `db:"last_name" json:"last_name"`

    Phone     string    `db:"phone" json:"phone"`

    Status bool         `db:"status" json:"status"`

    Addrs  []UserAddress

}

func main() {

    users := []User {

        {...User 1 data...},

        {...User 2 data...},

    }


    stmt, err := db.Prepare("INSERT INTO users (id, created_at, updated_at, deleted_at, username, password, first_name, last_name, phone, status) VALUES($1, now(), now(), $2, $3, $4, $5, $6, $7, $8)")

    if err != nil {

        log.Fatal(err)

    }

    defer stmt.Close() // Prepared statements take up server resources and should be closed after use.


    for id, user := range users {

        if _, err := stmt.Exec(id+1, user.Username, user.Password,... other data); err != nil {

            log.Fatal(err)

        }

    }

}

此外,您可以使用強(qiáng)大的Gorm包來使用所有關(guān)系數(shù)據(jù)庫。


查看完整回答
反對 回復(fù) 2022-12-19
?
慕蓋茨4494581

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個贊

我使用這個助手來插入。


使用查詢語法如下:


INSERT INTO checks (

    status) VALUES (:status)

    returning id;

樣本結(jié)構(gòu)


    type Row struct {

        Status string `db:"status"`

    }

// Insert inserts row into table using query SQL command

// table used only for loging, actual table name defined in query

// function expects Query with named parameters

func Insert(ctx context.Context, row interface{}, query string, table string, tx *sqlx.Tx) (int64, error) {

    // convert named query to native parameters format

    query, args, err := tx.BindNamed(query, row)

    if err != nil {

        return 0, fmt.Errorf("cannot bind parameters for insert into %q: %w", table, err)

    }


    var id struct {

        Val int64 `db:"id"`

    }


    err = sqlx.GetContext(ctx, tx, &id, query, args...)

    if err != nil {

        return 0, fmt.Errorf("cannot insert into %q: %w", table, err)

    }


    return id.Val, nil

}


查看完整回答
反對 回復(fù) 2022-12-19
  • 2 回答
  • 0 關(guān)注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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