我使用https://github.com/jmoiron/sqlx来查询Postgres。
插入新行时是否可以取回整行数据?
下面是我运行的查询:
result, err := Db.Exec("INSERT INTO users (name) VALUES ($1)", user.Name)
字符串
或者我应该使用现有的user
结构体作为数据库中新条目的真实来源?
我使用https://github.com/jmoiron/sqlx来查询Postgres。
插入新行时是否可以取回整行数据?
下面是我运行的查询:
result, err := Db.Exec("INSERT INTO users (name) VALUES ($1)", user.Name)
字符串
或者我应该使用现有的user
结构体作为数据库中新条目的真实来源?
4条答案
按热度按时间w46czmvw1#
以下是
sqlx
的交易文档:结果有两个可能的数据:LastInsertId()或RowsAffected(),其可用性取决于驱动程序。例如,在MySQL中,LastInsertId()将在具有自动递增键的插入中可用,但在PostgreSQL中,只能通过使用RETURNING子句从普通行游标中检索此信息。
所以我做了一个完整的demo,演示了如何使用
sqlx
执行transaction,demo将在addresses
表中创建一个地址行,然后在users
表中使用新的address_id
PK作为用户的user_address_id
FK创建一个用户。字符串
下面是测试结果:
型
tct7dpnv2#
这是一个示例代码,用于命名查询和插入数据和ID的强类型结构。
包括查询和结构以涵盖所使用的语法。
字符串
0pizxfdo3#
PostgreSQL支持
INSERT
语句的RETURNING
语法。范例:
字符串
文档:https://www.postgresql.org/docs/9.6/static/sql-insert.html
可选的RETURNING子句可使DDL根据实际插入的每一行计算并返回值(如果使用ON CONFLICT DO UPDATE子句,则更新)。这主要用于获取由默认值提供的值,例如序列号。但是,允许使用表的列的任何表达式。RETURNING列表的语法与SELECT的输出列表的语法相同。只有成功插入或更新将被返回。
zynd9foi4#
你可以使用Get函数:
字符串