Подтвердить что ты не робот

Как избежать обратного тиканья

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)
4b9b3361

Ответ 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++ в вашем обычном тексте и заменяйте (ищите и) заменяйте

'

с

'+"'"+'