登录
首页 >  Golang >  Go问答

在 Go 中编写文本 SQL 查询的正确方法

来源:Golang技术栈

时间:2023-03-21 15:23:46 246浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《在 Go 中编写文本 SQL 查询的正确方法》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

我找不到一个很好的例子来说明将文本查询的字符串部分与值连接起来的正确方法。例如:

query := `SELECT column_name FROM table_name
        WHERE column1_name = %d AND column2_name = %d` % (val1, val2)
rows, res, err := db.Query(query)

这行不通。编译器返回syntax error: unexpected comma, expecting ) 可能是因为我正在尝试使用 python 样式的元组。

如果我将其重写为

query := `SELECT column_name FROM table_name
        WHERE column1_name = %d AND column2_name = %d` % val1

我知道(mismatched types string and int)这告诉我元组是问题之一。

如果我先将参数转换为字符串,我会得到(operator % not defined on string)

在 python 中,你会做类似的事情

query = """SELECT column_name FROM table_name
    WHERE column1_name = %d
    AND column2_name = %d""" % (val1, val2)

要么

query = """SELECT column_name FROM table_name
    WHERE column1_name = %s
    AND column2_name = %s""" % (val1_string, val2_string)

我知道我可以将值转换为字符串并与 连接"STRING" + var + "STRING",但与 python 版本相比,这似乎真的很混乱。Go 中的那个 python 代码相当于什么?具体包括元组部分,以及连接字符串和整数。

正确答案

你可以fmt.Sprintf用来处理这个。

query := fmt.Sprintf(`SELECT columnA FROM tableA WHERE columnB = %d AND columnB = %s`,
                     someNumber, someString)

为避免注入问题,请将您的第一个代码编写为:

query := `SELECT column_name FROM table_name
    WHERE column1_name = %d AND column2_name = %d`

rows, err := db.Query(query, val1, val2)

以上就是《在 Go 中编写文本 SQL 查询的正确方法》的详细内容,更多关于golang的资料请关注golang学习网公众号!

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