登录
首页 >  Golang >  Go问答

使用 Golang 为 Cassandra 实现动态插入和查询

来源:stackoverflow

时间:2024-02-11 11:09:22 461浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《使用 Golang 为 Cassandra 实现动态插入和查询》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我一直在尝试使用 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()
}

并在this中调用这个方法

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,?, ?) 值 (%!s(缺失),%!s(缺失))

如何解决这个问题,我不知道我哪里做错了


正确答案


你几乎是对的,只是对格式化的插入字符串进行了一些小修改,见下文

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)
        }

    }
}

您将得到的最终插入字符串输出是

insert into example_keyspace.kafka(id, message) values (?, ?)

按照这一行

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

希望对你有帮助

今天关于《使用 Golang 为 Cassandra 实现动态插入和查询》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>