go - 如何使用gocql查询cassandra UDT?

标签 go cassandra gocql

Cassandra 表和UDT

CREATE TYPE IF NOT EXISTS phone_type(
   code TEXT,
   phone TEXT,
);

CREATE TABLE IF NOT EXISTS user_by_phone(
    user_id UUID,
    phone FROZEN<phone_type>,
    password TEXT,
    PRIMARY KEY (phone)
);
Golang结构
type PhoneType struct {
    Code  string `json:"code"`
    Phone string `json:"phone"`
}
phone := PhoneType{
    Code:  "+1",
    Phone: "7777777777",
}
gqcql查询
err := Session.Query("SELECT user_id, password FROM user_by_phone WHERE phone=?;", phone).Scan(
    &user.UserID,
    &user.Password,
)
使用此代码,即使在cassandra表中有记录,也不会找到返回。
如何使用gocql通过UDT查询?

最佳答案

尝试像这样定义您的结构(在结构定义中使用cql而不是json)

type PhoneType struct {
    Code  string `cql:"code"`
    Phone string `cql:"phone"`
}

phone := PhoneType{
    Code:  "+1",
    Phone: "7777777777",
}
按照此处的示例:
https://github.com/gocql/gocql/blob/master/udt_test.go
然后这对我有用:
    var id gocql.UUID
    var password string
    
    iter := session.Query("SELECT user_id, password FROM user_by_phone WHERE phone=?;", phone).Iter()
    for iter.Scan(&id, &password) {
        fmt.Println("Phone Record:", id, password)
    }
    if err := iter.Close(); err != nil {
        log.Fatal(err)
    }

关于go - 如何使用gocql查询cassandra UDT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64215104/

相关文章:

GoCQL : Marshal string into timestamp

java - Java 和 Go 中不同的 CRC32 值

go - 如何从源代码手动安装 Go 包

logging - 戈朗 : How to capture panic and log this error to original log file?

java - com.datastax.oss.driver.api.core.DriverTimeoutException : query 'SELECT * FROM system.peers' timed out after PT0. 5S

erlang - 如何将 erlang cassandra 客户端文件包含到 ejabberd 服务器中?

go - 如何使用 gocql 在 cassandra 中创建键空间

go - 如何自动设置GOBIN

cassandra - 如何在 cassandra 中进行同步删除并创建 key 空间?