问题标签 [sqlx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1524 浏览

mysql - sql:列索引6上的扫描错误,名称“scheduled_date”:null:无法将类型[] uint8扫描到null.Time

我收到此错误并尝试了 Internet 和 stackoverlow 中可用的所有内容来解决此问题。我试图在使用 sqlx 包连接 MySQL db 并扫描结果后运行查询。我已经尝试过针对类似问题共享的解决方案,但对我没有任何帮助。

我得到的确切错误是

恐慌:sql:列索引6上的扫描错误,名称“sdate”:null:无法将类型[]uint8扫描为null。时间:[50 48 49 56 45 49 50 45 48 55 32 48 50 58 48 56 58 53 49]

语法方面,查询工作得很好,当我在 sql 工作台中运行它时,我得到了结果。我还尝试了 ParseTime=true 作为链接之一的建议。

0 投票
1 回答
867 浏览

go - sqlx即使存在也返回空结构

这是我的代码:

这是数据库中的数据:

在此处输入图像描述

编辑:table_name:

在此处输入图像描述

我什至尝试过:

但返回总是空的,我确信数据存在并且我没有连接错误。

没有这些"Geo_commune" 行,err2 := db.Query( SELECT * FROM Geo_commune WHERE id=1 ORDER BY name ASC) 我有一个:2019/01/28 22:17:16 pq: 关系“geo_commune”不存在

问候

编辑我的新测试:

给我 :

0 投票
0 回答
190 浏览

go - 对于 cobra 应用程序,*sqlx.DB 对象应该保存在哪里?

我有一个使用包访问数据库的眼镜蛇项目sqlx,该命令具有子命令。cobra 相关代码在cmd文件夹/子包中,DB 相关代码在db文件夹/子包中。

我想有包 db 有一个工厂功能

cmd包的某个地方调用。但我不确定在哪里调用它以及如何使其可用于所有子命令。

一种想法是在包中有一个全局变量,并在's或'scmd中对其进行初始化。在这种情况下使用全局变量是否不好?root.goinit()rootCmdPersistentPreRun

如果我不使用全局变量,一种可能性是让子命令调用db.NewDB(). 不知何故,这种方式也感觉不太好。

db.NewDB()我发现在包中调用一次更好cmd,可能在root.go. 但是我应该在哪里保存数据库句柄以便子命令可以使用它?

0 投票
3 回答
12369 浏览

sql - 高效地将一对多多对多数据库映射到 Golang 中的结构

问题

在 Golang 中处理一对多或多对多 SQL 关系时,将行映射到结构的最佳(高效、推荐、“Go-like”)方法是什么?

以下面的示例设置为例,我尝试详细说明每种方法的优缺点,但想知道社区推荐什么。

要求

  • 适用于 PostgreSQL(可以是通用的,但不包括 MySQL/Oracle 特定功能)
  • 效率 - 没有暴力破解每个组合
  • 没有 ORM - 理想情况下只使用database/sqljmoiron/sqlx

例子

为了清楚起见,我删除了错误处理

楷模

数据库

方法 1 - 选择所有项目,然后为每个项目选择标签

优点

  • 简单的
  • 容易明白

缺点

  • 随着数据库查询的数量与项目数量成比例地增加,效率低下

方法 2 - 手动构建 SQL 连接和循环遍历行

优点

  • 单个数据库调用和游标,可以在不消耗太多内存的情况下循环

缺点

  • 结构上的多个连接和许多属性使开发变得复杂且困难
  • 不太高效;更多的内存使用和处理时间与更多的网络调用

失败的方法 3 - sqlx 结构扫描

尽管失败了,但我想包含这种方法,因为我发现它是我目前的目标,即效率与开发简单性相结合。我希望通过db在每个结构字段上显式设置标签sqlx可以进行一些高级结构扫描

不幸missing destination name tag_id in *[]Item的是,这个错误导致我相信StructScan它不够先进,无法递归循环遍历行(没有批评 - 这是一个复杂的场景)

可能的方法 4 - PostgreSQL 数组聚合器和GROUP BY

虽然我确信这行不通,但我已经包含了这个未经测试的选项,看看它是否可以改进,以便它可以工作。

当我有时间时,我会尝试在这里进行一些实验。

0 投票
1 回答
4644 浏览

mysql - 如何使用sqlx检查行是否存在?

使用sqlx,我想知道查询 MySql 数据库以了解对 MySql 的查询是否返回空行:

所以按照这个,我想出了

但我总是得到post found,尽管事实上没有行。

这里可能有什么问题,我该如何解决?

0 投票
0 回答
154 浏览

sql - 从左连接的结果创建嵌套结构 - 你将如何改进我的方法?

我从 LEFT JOIN 的结果创建嵌套结构 - 你将如何改进我的代码/使其更惯用?

使用 Scan 会导致 nil 指针值出现问题,我想避免在结构中使用指针纯粹作为 LEFT JOIN 的解决方案。

我可以使用反射包而不是手动将列映射到结构吗?

0 投票
2 回答
1672 浏览

sql - Go SQL 查询不一致

我在执行查询时遇到了一些非常奇怪的不一致,并且想知道是否有人知道原因。

想象一下,我有一个定义如下的结构:

和一个具有以下列的 MySQL 表:

我要执行的查询:

从表中选择 A、B、C、D,其中 A="a"

第一种执行方式:

第二种执行方式:

我遇到的不一致如下: 第一种方式执行查询时, Bfield 的类型为int. 但是,当第二次执行查询时,它是[]uint8.

例如,当 B 为 1 时,就会出现这种结果。

为什么 Bfield 的类型会根据查询的执行方式而有所不同?

连接声明:

编辑

使用 Go 数据库/sql 包 + 驱动程序也会发生这种情况。下面的查询分别分配Bfield[]uint8int64

db 的类型为 *sql.DB

查询1:

db.QueryRow(SELECT A, B, C, D FROM table WHERE A="a").Scan(&result.Afield, &result.Bfield, &result.Cfield, &result.Dfield)

--> 类型Bfield[]uint8

查询2:

db.QueryRow(SELECT A, B, C, D FROM table WHERE A=?, "a").Scan(&result.Afield, &result.Bfield, &result.Cfield, &result.Dfield)

--> 类型Bfieldint64

编辑

还有一点需要注意的是,当链接多个 WHERE 子句时,只要使用 填充至少?1 ,查询就会返回int。否则,如果它们都填充在字符串中,它将返回[]uint8

0 投票
0 回答
132 浏览

mysql - MySQL 和 MariaDB SELECT 返回类型的区别

执行SELECT查询并将结果存储在具有 type 字段的结构中时interface,结果类型会有所不同int64[]uint8具体取决于我使用的数据库是 MySQL 数据库还是 MariaDB。

这与我之前提出的一个问题(并得到了回答)有关:Go SQL query inconsistency

给定一个接口如下:

和数据库表:

我要执行的查询:

从表中选择 A、B、C、D,其中 A="a"

它是如何执行的:

问题

如果在 MySQL 数据库上执行,则类型Bfieldint64(desired),但如果在 MariaDB 上执行,则类型为[]uint8

为什么 Bfield 的类型不同,取决于查询是在 MySQL db 还是 MariaDB 上执行的?

可能有用的信息:

db 是 type: *sqlx.DB,然后传递给执行查询的函数,其中 db 是 type Connection

我正在使用https://github.com/jmoiron/sqlx

0 投票
2 回答
3250 浏览

postgresql - 如何使用 Golang lib/pq API 将二进制数据插入 PostgreSQL BYTEA 列?

我想在 BYTEA 列中插入一些二进制数据

我将如何将 somefile.tar.gz 的内容插入到具有 BYTEA 列的表中?

  1. 一个例子会有所帮助
  2. 是否可以使用 BYTEA 的 HEX 格式(postgres 9.2)?
  3. 是否可以从/到 golang 向/从 postgres 流式传输?
0 投票
1 回答
805 浏览

postgresql - 如何在postgres中查询timestamptz并与time.Time进行比较?

我正在使用 Postgres 10 和一个虚拟表

使用 jmoiron/sqlx 时,我无法time.Timetimestamptz. 示例代码是

我得到的结果说它们在最后一步不相等

我应该怎么做才能reflect.DeepEqual认为两者都是平等的?