GVKun编程网logo

如何使用Golang在SQL中执行IN查找?(golang sql.db)

14

在这篇文章中,我们将带领您了解如何使用Golang在SQL中执行IN查找?的全貌,包括golangsql.db的相关情况。同时,我们还将为您介绍有关AppEngine数据存储区:如何使用golang在

在这篇文章中,我们将带领您了解如何使用Golang在SQL中执行IN查找?的全貌,包括golang sql.db的相关情况。同时,我们还将为您介绍有关App Engine数据存储区:如何使用golang在属性上设置多个值?、golang 全局执行顺序,先执行全局变量,在执行init、scala – 如何在spark sql中执行多行sql、使用golang在Google App Engine数据存储上执行“ IN Array”查询的知识,以帮助您更好地理解这个主题。

本文目录一览:

如何使用Golang在SQL中执行IN查找?(golang sql.db)

如何使用Golang在SQL中执行IN查找?(golang sql.db)

Go对于此SQL查询中的第二个参数想要什么。我正在尝试IN在postgres中使用查找。

stmt, err := db.Prepare("SELECT * FROM awesome_table WHERE id= $1 AND other_field IN $2")rows, err := stmt.Query(10, ???)

我真正想要的是:

SELECT * FROM awesome_table WHERE id=10 AND other_field IN (this, that);

答案1

小编典典

查询只是使用varargs来替换sql中的参数,因此,在您的示例中,您只需要执行

rows, err := stmt.Query(10)

例如,这个和第二个示例的内容是动态的,那么您将

stmt, err := db.Prepare("SELECT * FROM awesome_table WHERE id=$1 AND other_field IN ($2, $3)")rows, err := stmt.Query(10,"this","that")

如果“ IN”部分具有可变的args,则可以执行(播放)

package mainimport "fmt"import "strings"func main() {    stuff := []interface{}{"this", "that", "otherthing"}    sql := "select * from foo where id=? and name in (?" + strings.Repeat(",?", len(stuff)-1) + ")"    fmt.Println("SQL:", sql)    args := []interface{}{10}    args = append(args, stuff...)    fakeExec(args...)    // This also works, but I think it''s harder for folks to read    //fakeExec(append([]interface{}{10},stuff...)...)}func fakeExec(args ...interface{}) {    fmt.Println("Got:", args)}

App Engine数据存储区:如何使用golang在属性上设置多个值?

App Engine数据存储区:如何使用golang在属性上设置多个值?

我正在尝试使用Golang在Google的数据存储中为单个属性保存多个值。

我有一个int64,我希望能够存储和检索。从文档中,我可以看到通过实现PropertyLoadSaver
{}接口对此提供了支持。但我似乎无法提出正确的实施方案。

本质上,这就是我要完成的工作:

type Post struct {    Title         string    UpVotes       []int64 `json:"-" xml:"-" datastore:",multiple"`    DownVotes     []int64 `json:"-" xml:"-" datastore:",multiple"`}c := appengine.NewContext(r)p := &Post{    Title: "name"    UpVotes: []int64{23, 45, 67, 89, 10}    DownVotes: []int64{90, 87, 65, 43, 21, 123}}k := datastore.NewIncompleteKey(c, "Post", nil)err := datastore.Put(c, k, p)

但是没有“数据存储:无效的实体类型”错误。

答案1

小编典典

默认情况下,AppEngine支持多值属性,您无需执行任何特殊操作即可使其工作。您不需要实现PropertyLoadSaver接口,也不需要任何特殊的标记值。

如果struct字段是切片类型,则它将自动为多值属性。此代码有效:

type Post struct {    Title         string    UpVotes       []int64    DownVotes     []int64}c := appengine.NewContext(r)p := &Post{    Title: "name",    UpVotes: []int64{23, 45, 67, 89, 10},    DownVotes: []int64{90, 87, 65, 43, 21, 123},}k := datastore.NewIncompleteKey(c, "Post", nil)key, err := datastore.Put(c, k, p)c.Infof("Result: key: %v, err: %v", key, err)

当然,如果您愿意,可以为json和xml指定标签值:

type Post struct {    Title         string    UpVotes       []int64 `json:"-" xml:"-"`    DownVotes     []int64 `json:"-" xml:"-"`}

笔记:

但是请注意,如果索引了多值属性,则该属性不适合存储大量值。这样做将需要许多索引(许多写入操作)才能存储和修改实体,并且可能会达到实体的索引限制(有关更多详细信息,请参见索引限制和爆炸索引)。

因此,例如,您不能使用多值属性存储的上,下投票数Post。对于您应该存储票作为单独/不同实体链接到Post由如KeyPost或最好只是它IntID

golang 全局执行顺序,先执行全局变量,在执行init

golang 全局执行顺序,先执行全局变量,在执行init

package utils
import "fmt"
 
var Age int
var Name string
 
// Age Nane 是全局变量
 
func init(){
    fmt.Println("init 包的初始化 init()。。。")
    Age = 100
    Name = "Tao"
 
}
 
 
 
 
 
 
///////////////////////////////////////////////////////////
package main
import (
    "fmt"
    "go_code/chapter02/funinit/utils"
)
// 全局执行顺序,先执行全局变量,在执行init(),在执行main方法
var age = test()
 
func test() int {
    fmt.Println("test()")
    return 90
}
 
func init(){
    fmt.Println("init......")
}
 
// init 函数,通常在init函数中完成初始化工作
func main(){
   fmt.Println("main......")
 
   fmt.Println("Age is value",utils.Age,"Name is value",utils.Name)
}

————————————————
版权声明:本文为CSDN博主「itdada」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ITdada/article/details/83689735

scala – 如何在spark sql中执行多行sql

scala – 如何在spark sql中执行多行sql

如何在Spark sql中执行冗长的多行Hive查询?像下面的查询:

val sqlContext = new HiveContext (sc)
val result = sqlContext.sql ("
 select ...
 from ...
");

解决方法

例如,使用“”“代替

val results = sqlContext.sql ("""
     select ....
     from ....
""");

或者,如果要格式化代码,请使用:

val results = sqlContext.sql ("""
     |select ....
     |from ....
""".stripMargin);

使用golang在Google App Engine数据存储上执行“ IN Array”查询

使用golang在Google App Engine数据存储上执行“ IN Array”查询

有没有一种方法可以ids []int64对数据存储区进行查询?我尝试了以下无济于事。

  1. 错误出

    q := datastore.NewQuery("Category").Filter("Id IN", ids)
  2. 让我了解数据存储区中的所有类别

    for _, id := range ids {q.Filter("Id =", id)

    }

在icza回答之后

var keys []*datastore.Keyfor _, id := range ids {    keys = append(keys, datastore.NewKey(c, "Category", "", id, nil))}categories := make([]Category, len(keys))err := datastore.GetMulti(c, keys, categories)if err != nil {    return nil, err}

答案1

小编典典

通常"IN",数据存储区不支持过滤器。Query.Filter()清单文档列出了允许的运算符:

">", "<", ">=", "<=", or "="

您可以为要作为过滤依据的数组中的每个元素执行一个 单独的
查询。同样,如果元素在连续范围内,则可以INid>=min和代替id<=max。例如:

ids := []int64{1,2,3,4}q := datastore.NewQuery("Category").Filter("Id>=", 1).Filter("Id<=", 4)

还要注意,虽然IN通常不支持,但是如果属性是实体键本身,则可以使用datastore.GetMulti()函数获取由其键数组指定的实体列表:

func GetMulti(c appengine.Context, key []*Key, dst interface{}) error

注意:

第二次尝试返回所有实体,因为您调用Filter()了查询,但是没有存储返回值,因此最终执行的查询将根本没有任何过滤器。Query.Filter()返回包含您刚刚指定的过滤器的派生查询,您必须使用返回的Query进行中查询。所以应该是:

q = q.Filter("Id=", id)

但是,即使这样也不起作用:如果指定了多个过滤器,它们将处于逻辑AND连接,因此很可能会给您0结果,因为我怀疑在Id列表和包含您所有ID的类别中都不会存在想要过滤。

关于如何使用Golang在SQL中执行IN查找?golang sql.db的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于App Engine数据存储区:如何使用golang在属性上设置多个值?、golang 全局执行顺序,先执行全局变量,在执行init、scala – 如何在spark sql中执行多行sql、使用golang在Google App Engine数据存储上执行“ IN Array”查询等相关知识的信息别忘了在本站进行查找喔。

本文标签: