标签: sqlx

在 Go 中初始化和保留准备好的语句的推荐方法是什么?

我正在使用sqlx编写我的第一个 Go 项目,并想使用准备好的语句。

我不确定以一种很好的可管理方式初始化和保留 Prepared 语句变量的推荐做法是什么。

我希望它们只能从实际必须使用它们的代码部分访问,到目前为止,每个语句都由单个函数使用,因此全局变量不是一个好的选择(除了通常不受欢迎之外)。

在 C/C++ 中,我可能会使用函数静态变量并在第一次输入函数时对其进行初始化。这样,有关语句内容的信息和使用它的调用彼此接近。

但是据我目前所知,Go 中没有“方法静态变量”,那么有什么选择呢?

我找到了对 Closures 的引用,它们是匿名函数,但这是实现此目的的最佳方法吗?从“准备好的报表最佳实践”的角度来看,我的目标是正确的吗?

sql go sqlx

5
推荐指数
1
解决办法
739
查看次数

struct Time 属性不会从 Go sqlx 库加载

我有一个带有属性时间的结构:

type Basket struct {  
  ...  
  Created_at time.Time `db:"created_at"`
}
Run Code Online (Sandbox Code Playgroud)

时间保存为:

basket.Created_at = time.Now().UTC()
Run Code Online (Sandbox Code Playgroud)

如果我使用 Insert sql 语句保存它,它会在 SQLite3 中很好地节省时间,但是当我使用以下命令选择所需的记录时:

ret_basket := Basket{}
err := database.DB.Get(&ret_basket, "SELECT id, ..., created_at FROM baskets WHERE user_id = ?", some_user_id)
Run Code Online (Sandbox Code Playgroud)

它返回具有正确加载的其他属性的记录,除了ret_basket.Created_at作为0001-01-01 00:00:00 +0000 UTC

有什么建议?

sqlite go sqlx

5
推荐指数
1
解决办法
2243
查看次数

如何使用sqlx在一个切片中查询mysql?

我想在mysql数据库中查询一个表的值IN:

var qids []int
//fill qids dynamically
err = database.SQL.Select(&quotes,
    "SELECT * FROM quote WHERE qid IN $1", qids)
if err != nil {
    log.Println(err)
}
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

sql: converting Exec argument #0's type: unsupported type []int, a slice
quotes []
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

mysql go sqlx

5
推荐指数
1
解决办法
6959
查看次数

使用 sqlx 从连接两次的表填充嵌入结构

简而言之,我的问题是:我可以使用 sqlx 的 StructScan 用来自连接两次的同一个 SQL 表的值填充两个嵌入式结构吗?

有用的 sqlx 包的帮助文件说明了这一点:

StructScan 将在 Person.AutoIncr.ID 中设置 id 列结果,也可以通过 Person.ID 进行访问。为了避免混淆,建议您使用 AS 在 SQL 中创建列别名。

假设我有这个 SQL 查询(父子、人到电话):

func getSQL() string {
    return `SELECT * 
        FROM person
        LEFT JOIN phones AS Phone1 ON Phone1.phone_id = person_phoneID1
        LEFT JOIN phones AS Phone2 ON Phone2.phone_id = person_phoneID2
        WHERE people_id = 1;`
}
Run Code Online (Sandbox Code Playgroud)

使用 sqlx 和 StructScan,我想填充一个充满嵌入式结构的结构,如下所示:

//Struct with embedded structs
type personHelper struct{
    Person
    Phone1 //Should I use the same name as SQL …
Run Code Online (Sandbox Code Playgroud)

go sqlx

5
推荐指数
0
解决办法
1342
查看次数

Golangs sqlx.DB.Select()语句中的Bindvars需要0个参数

我正在使用SQLX和PQ通过PostGress查询SQL数据库。我正在使用带有绑定变量的“从SQLX选择”功能,但带有

pq:有1个参数,但该语句需要0。

 query = `
    SELECT 
        count(*) AS count 
    FROM 
        ledger 
    WHERE 
        enterprise_id=($1)
 `
 var stat singleStat

 err = db.Select(&stat, query, enterpriseID)
Run Code Online (Sandbox Code Playgroud)

go sqlx pq

5
推荐指数
1
解决办法
381
查看次数

间歇性的“对等连接重置”sql postgres

一段时间不活动后,我的 go web 服务在执行第一个 postgres sql 查询时收到一条net.OpError消息read tcp x.x.x.x:52086->x.x.x.x:24414: read: connection reset by peer。错误后,后续请求将正常工作。

postgres 数据库由 compose.com 托管,它在 postgres db 前面有 haproxy。我的 go web 应用程序使用标准 sql 和 sqlx。

我试过db.Ping()每 15 分钟运行一次自动收报机,但这并没有解决问题。

为什么 go 标准sql库不处理这些连接中断?

postgresql haproxy go compose-db sqlx

5
推荐指数
1
解决办法
3106
查看次数

我应该使用什么驱动程序名称来使用 pgx 驱动程序将 Go sqlx 连接到 Postgres?

或者,我还需要哪些额外的进口?

我想开始使用 Postgres 作为我正在进行的一些开发的主要 DBMS,我的研究表明这pgx是目前选择的数据库驱动程序。我已经设置了一个连接包:

package database

import (
    "fmt"
    _ "github.com/jackc/pgx/v5"
    "net/url"

    "github.com/jmoiron/sqlx"
    log "github.com/sirupsen/logrus"
)

func PgConnect(username, password, host, app string) *sqlx.DB {
    s := fmt.Sprintf("postgres://%s:%s@%s?app+name=%s&sslmode=allow", url.QueryEscape(username), url.QueryEscape(password), host, app)
    db, err := sqlx.Connect("postgres", s)
    if err != nil {
        log.Panicf("failed to connect to sqlserver://%s:%s@%s err: %s", username, "xxxxxxxxxxxx", host, err)
    }

    return db
}
Run Code Online (Sandbox Code Playgroud)

URL 的计算结果为:

postgres://user:password@database-host:5432/database-name?app+name=app-name&sslmode=allow
Run Code Online (Sandbox Code Playgroud)

我也尝试过postgresql这里的前缀,因为我在互联网上的地方都看到过这两个前缀。

对于呼叫中的驱动程序名称sqlx.Connect("postgres", s)我已尝试过postgrespostgresql并且pgx

在所有情况下,对 connect 的调用都会失败并出现错误:

sql: unknown …
Run Code Online (Sandbox Code Playgroud)

postgresql go sqlx pgx

5
推荐指数
1
解决办法
4326
查看次数

如何在Go中的sqlx查询中使用通配符?

我正在使用sqlx与mysql数据库,并希望查询author表中以某些字母开头的名称.这是查询:

sqlx.DB.Select(&authors, "SELECT * FROM author WHERE first_name LIKE ?% OR last_name LIKE ?%", letter,letter)
Run Code Online (Sandbox Code Playgroud)

但我明白了

您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在'%OR last_name LIKE?%'附近使用正确的语法

我查看了文档中的LIKE查询示例,但找不到任何查询.所以想知道如何解决这个问题?

go sqlx

4
推荐指数
1
解决办法
1511
查看次数

Go 语言,使用 sqlx.StructScan 扫描嵌入式结构

我刚刚开始学习 Go 语言。我写了以下简单的程序。

在这里,我试图用所有书籍和相关作者填充结构。

Bookstruct 已嵌入Author结构。

package main
import (
    "fmt"
    "log"
    "time"
    "github.com/jmoiron/sqlx"
    _ "github.com/lib/pq"
)

type Book struct {
    ID      int
    Title   string
    Year    int
    Bauther  Auther `db:"auther"`
}

type Auther struct {
    ID      int
    Name    string
    Dob     time.Time
}

func main() {
    db, err := sqlx.Open("postgres", "host=localhost user=testuser dbname=testdb password=testuser")
    if err != nil {
       log.Fatal("DB Conn error: ", err)
    }

    if err = db.Ping(); err != nil {
        log.Fatal("DB Ping error: ", err) …
Run Code Online (Sandbox Code Playgroud)

database struct go sqlx

3
推荐指数
1
解决办法
5510
查看次数

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

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

所以在这个之后,我想出了

var result model.Post
err := database.SQL.Get(&result, "SELECT * FROM post WHERE post_id=? AND user_id=? LIMIT 1", postID, userID)
if err == sql.ErrNoRows { 
    log.Println(err)
    log.Println("post not found")
} else { 
    log.Println("post found")
}
Run Code Online (Sandbox Code Playgroud)

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

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

mysql go sqlx

3
推荐指数
1
解决办法
3653
查看次数

标签 统计

go ×10

sqlx ×10

mysql ×2

postgresql ×2

compose-db ×1

database ×1

haproxy ×1

pgx ×1

pq ×1

sql ×1

sqlite ×1

struct ×1