Golang 为 "CREATE TABLE" 准备了语句
Golang prepared statements for "CREATE TABLE"
我发现 create table
语句无法识别我要插入的通配符。我如何在 golang 中使用准备好的语句来做一些事情?
stmt, err := tx.Prepare(`
CREATE TABLE table_number_ (
guid character varying(64) NOT NULL,
number integer,
name character varying(64),
PRIMARY KEY (guid),
CONSTRAINT some_onstraint
CHECK ((number = ))
)`)
if err != nil {
return err
}
defer stmt.Close()
if _, err := stmt.Exec(
string(table_number),
table_number; err != nil {
tx.Rollback()
return err
}
打印出来的错误是:
sql: expected 0 arguments, got 2
编辑:
显然我知道我可以像平常一样构建字符串,但想知道是否有内置方法。
您不能使用 table 的参数或 SQL 中的列名。您将必须手动转义可变部分并在代码中构建 table 名称并将其注入 SQL 字符串,然后再将其发送到数据库。
此外,PostgreSQL engine is built 不允许在 CREATE
语句中的任何位置使用变量。这意味着当运行这样的查询时引擎不会接受任何参数。
在 Postgre 中不可能SQL 因为:
PostgreSQL 的绑定参数只能用于文字,不能用于标识符。这是因为解析器必须知道标识符是什么才能正确解析查询,但绑定参数仅在解析后发送。所以你不能为 table 名称等使用参数
PostgreSQL 无论如何都不支持实用程序语句中的绑定参数(insert/update/delete/select 以外的任何东西)。
一些驱动程序支持 客户端 参数替换和通过不同的放置参数语法转义标识符,但据我所知 Go 的不支持。所以你必须小心地使用字符串插值。请记住 始终 将标识符括在 "double quotes"
中并将任何嵌入的引号加倍,因此 table 名称 my "table"!
在 [= 中变为 "my ""table!"
32=].
我发现 create table
语句无法识别我要插入的通配符。我如何在 golang 中使用准备好的语句来做一些事情?
stmt, err := tx.Prepare(`
CREATE TABLE table_number_ (
guid character varying(64) NOT NULL,
number integer,
name character varying(64),
PRIMARY KEY (guid),
CONSTRAINT some_onstraint
CHECK ((number = ))
)`)
if err != nil {
return err
}
defer stmt.Close()
if _, err := stmt.Exec(
string(table_number),
table_number; err != nil {
tx.Rollback()
return err
}
打印出来的错误是:
sql: expected 0 arguments, got 2
编辑: 显然我知道我可以像平常一样构建字符串,但想知道是否有内置方法。
您不能使用 table 的参数或 SQL 中的列名。您将必须手动转义可变部分并在代码中构建 table 名称并将其注入 SQL 字符串,然后再将其发送到数据库。
此外,PostgreSQL engine is built 不允许在 CREATE
语句中的任何位置使用变量。这意味着当运行这样的查询时引擎不会接受任何参数。
在 Postgre 中不可能SQL 因为:
PostgreSQL 的绑定参数只能用于文字,不能用于标识符。这是因为解析器必须知道标识符是什么才能正确解析查询,但绑定参数仅在解析后发送。所以你不能为 table 名称等使用参数
PostgreSQL 无论如何都不支持实用程序语句中的绑定参数(insert/update/delete/select 以外的任何东西)。
一些驱动程序支持 客户端 参数替换和通过不同的放置参数语法转义标识符,但据我所知 Go 的不支持。所以你必须小心地使用字符串插值。请记住 始终 将标识符括在 "double quotes"
中并将任何嵌入的引号加倍,因此 table 名称 my "table"!
在 [= 中变为 "my ""table!"
32=].