在这篇文章中,我们将带领您了解如何使用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)
- App Engine数据存储区:如何使用golang在属性上设置多个值?
- golang 全局执行顺序,先执行全局变量,在执行init
- scala – 如何在spark sql中执行多行sql
- 使用golang在Google App Engine数据存储上执行“ IN Array”查询
如何使用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在属性上设置多个值?
我正在尝试使用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
由如Key
的Post
或最好只是它IntID
。
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
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”查询
有没有一种方法可以ids []int64
对数据存储区进行查询?我尝试了以下无济于事。
错误出
q := datastore.NewQuery("Category").Filter("Id IN", ids)
让我了解数据存储区中的所有类别
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 "="
您可以为要作为过滤依据的数组中的每个元素执行一个 单独的
查询。同样,如果元素在连续范围内,则可以IN
用id>=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”查询等相关知识的信息别忘了在本站进行查找喔。
本文标签: