为了账号安全,请及时绑定邮箱和手机立即绑定

如何为cassandra golang形成动态插入查询

如何为cassandra golang形成动态插入查询

Go
有只小跳蛙 2022-12-13 10:52:01
我一直在尝试使用 gocql 驱动程序在 golang 中为 cassandra 创建一个动态查询,这是我到目前为止所尝试的func WriteRecord(session gocql.Session, insertstring string, table string, fields []string, values ...interface{}) error {    var placeholder []string    for range fields {        placeholder = append(placeholder, "?")    }    querystring := fmt.Sprintf(insertstring, table, strings.Join(fields, ", "), strings.Join(placeholder, ", "))    fmt.Println(querystring)    return session.Query(querystring, values...).Exec()}并在此调用此方法func writeData(session gocql.Session) {    fields := []string{        "id",        "message",    }    for i := 1; i <= 10; i++ {        /*            if err := session.Query(                "INSERT INTO example_keyspace.example_go (id, message) VALUES (?, ?)", i, "Hello from golang!",            ).Exec(); err != nil {                log.Fatal(err)            }        */        insertString := "INSERT INTO example_keyspace.%s(%s,%s) VALUES (%s,%s)"        err := WriteRecord(session, insertString, "kafka", fields, i, "hey kafka")        if err != nil {            log.Fatal(err)        }    }}它给了我这个输出插入 example_keyspace.kafka(id, message,?, ?) VALUES (%!s(MISSING),%!s(MISSING))如何解决这个问题,我不确定我哪里做错了
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

您几乎是对的,只是对格式化的 insertstring 进行了一些小的修改,请参见下文


func WriteRecord(session gocql.Session, insertstring string, table string, fields []string, values ...interface{}) error {

    var placeholder []string


    for range values {

        placeholder = append(placeholder, "?")

    }

    querystring := fmt.Sprintf(insertstring, table, strings.Join(fields, ", "), strings.Join(placeholder, ", "))

    fmt.Println(querystring)

    return session.Query(querystring, values...).Exec()

}




func writeData(session gocql.Session) {

    fields := []string{

        "id",

        "message",

    }


    for i := 1; i <= 10; i++ {

        /*

            if err := session.Query(

                "INSERT INTO example_keyspace.example_go (id, message) VALUES (?, ?)", i, "Hello from golang!",

            ).Exec(); err != nil {

                log.Fatal(err)

            }

        */

        insertString := "INSERT INTO example_keyspace.%s(%s) VALUES (%s)"

        err := WriteRecord(session, insertString, "kafka", fields, i, "hey kafka") // Just remove extra %s as you are joining the string 

        if err != nil {

            log.Fatal(err)

        }


    }

}

您将获得的最终 insertstring 输出是


INSERT INTO example_keyspace.kafka(id, message) VALUES (?, ?)

按照这条线


return session.Query(querystring, values...).Exec() // the  values will be passed

希望能帮助到你


查看完整回答
反对 回复 2022-12-13
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信