Как избежать обратного тиканья
MySQL требует, чтобы таблицы с теневыми зарезервированными словами были снова отмечены. У меня есть таблица Role, которая является зарезервированным словом, но я уже поместил свой запрос в обратные тики, чтобы я мог написать его в несколько строк (это игрушечный запрос, большие не поместятся в одну строку).
Как мне избежать спины?
Вот мой код:
dbmap := db.InitDb()
var roles []entities.Role
query :=
' << Difficult to see with SO 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)
Ответы
Ответ 1
Вы не можете избежать обратных шагов внутри backticks, но вы можете сделать:
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)
Ответ 2
Если ваш запрос длинный, возможно, стоит вставить текстовый файл и прочитать его, что будет держать ваш код более кратким и организованным, а также полностью исключить проблему цитирования.
Ответ 3
Вы можете использовать префикс .
:
query := `
SELECT *
FROM .Role
`
Ответ 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`") }
Ответ 5
Используйте notepad++ в вашем обычном тексте и заменяйте (ищите и) заменяйте
'
с
'+"'"+'