MySQL要求使用隐藏保留字的表格进行回溯。我有一个表格角色,这是一个保留字,但我已经把我的查询放在后面的刻度中,所以我可以在多行上写它(这是一个玩具查询,大的不适合一行......)。 / p>
如何逃避背虱?
这是我的代码:
dbmap := db.InitDb()
var roles []entities.Role
query :=
` << Difficult to see with SO's code editor widget, but here is a back tick
SELECT *
FROM `Role` <<< Needs escaping
` << Difficult to see, but here is a back tick
_, err := dbmap.Select(&roles, query, nil)
if err != nil {
panic(err)
}
fmt.Println(roles)
答案 0 :(得分:50)
你无法在反叛内部逃避反击,但你可以这样做:
dbmap := db.InitDb()
var roles []entities.Role
query := `
SELECT *
FROM ` + "`Role`"
_, err := dbmap.Select(&roles, query, nil)
if err != nil {
panic(err)
}
fmt.Println(roles)
答案 1 :(得分:7)
如果您的查询很长,可能需要输入一个文本文件并将其读入,这样可以使您的代码更加简洁有序,并且还可以完全避免重复引用问题。
答案 2 :(得分:6)
您可以使用.
前缀:
query := `
SELECT *
FROM .Role
`
答案 3 :(得分:4)
你可以尝试编写这样的查询:
query :=fmt.Sprintf("SELECT * FROM `Role`")
您可以比较输出:
import "fmt"
func main() {
query :=fmt.Sprintf("SELECT * FROM `Role`")
fmt.Println(query)
fmt.Println( `SELECT * FROM ` + "`Role`") }
答案 4 :(得分:0)
我只是使用了一个占位符(如%s
)来代替反引号,然后替换了它们:
strings.ReplaceAll(`CREATE TABLE %smydatabase%s.%smytable%s (
%sid%s binary(16),
%sname%s varchar(45),
PRIMARY KEY(%sid%s)
)`, "%s", "`")
答案 5 :(得分:-1)
在纯文本上使用notepad ++并替换(搜索和)替换
`
使用
`+"`"+`