在 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 代码的等价物是什么?具体包括元组部分,并连接一个字符串和一个整数。


桃花长相依
浏览 163回答 1
1回答

函数式编程

< 由于注入漏洞而对 SQL 语句使用字符串插值的标准警告 >你可以用它fmt.Sprintf来处理这个。query := fmt.Sprintf(`SELECT columnA FROM tableA WHERE columnB = %d AND columnB = %s`,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;someNumber, someString)为避免注入问题,请将您的第一个代码编写为:query := `SELECT column_name FROM table_name&nbsp; &nbsp; WHERE column1_name = %d AND column2_name = %d`rows, err := db.Query(query, val1, val2)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go