在Golang中建立动态(条件)WHERE SQL查询

时间:2018-09-14 08:15:29

标签: go orm printf

我正在使用golang,go_reform,PostgreSQL。我想要做的是一个REST搜索实用程序,在我遇到条件搜索查询之前,一切都很好。 “有条件的”在这里表示我要在一个表中搜索10列,并且可能有很多组合,所以我无法单独处理它们。我需要的是查询生成器,但是我不了解如何在Go中实现此功能。现在,我有一个这样的想法,但似乎效率不高

type Query struct {
    Id               *int64
    FirstName        *string
    MiddleName       *string
    LastName         *string
    AreaId           *int64
    Birthday         *time.Time
}

func (table *Query) Find() (*User) {
    if table.Id != nil {
        idstr := fmt.Sprintf("WHERE Id = %d AND ", table.Id)
    }
    else idstr := "WHERE "
    }
    if table.FirstName != "" {
        firststr := fmt.Sprintf("FirstName = %s AND", table.FirstName)
    }
    else firststr := ""
}//and so on

感觉真的很尴尬,所以我想知道是否有更好的方法来确定Find()中的字段并基于此构建SQL查询。 (实际上,它来自JSON并绑定到Query结构,因此也许有一种没有结构的方法)。也可能有SQL解决方法,但我认为在没有所有可能的列的情况下构建查询会更有效。

编辑:顺便说一句,为了使我的Google搜索查询更准确,我发现了一堆与我的问题有关的东西,也许我现在会尝试使用它。对于那些也有兴趣的人: old go playground example

Making dynamic SQL queries to a MySQL DB

gorp package(片段内容听起来很有希望)

2 个答案:

答案 0 :(得分:0)

在PostgreSQL

查询(字符串sql,args ...)

在这里,当我以表格形式将值传递给Query时 查询(字符串,值) 抛出一个错误,仅添加了一个值,预期应为2,如何将接口数组作为args传递给Query

我找到了答案:您需要以Query(string,values ...)的形式传递它

答案 1 :(得分:0)

在orm GORM中,我们这样做

if con1 {
    db.Where("con1 =?", con1Flag)
}

如果您编写自己的文件,建议改成gorm。或者您可以参考您正在使用的文件,无论它是否具有与上述代码相同的用法。 如果您要编写自己的代码,则可以随意进行。 如果您在小组中工作,我想使用成熟的Orm会更好