首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的planetscale golang应用程序无法正确选择数据库

简单的planetscale golang应用程序无法正确选择数据库
EN

Stack Overflow用户
提问于 2022-05-12 05:43:07
回答 1查看 133关注 0票数 0

在使用DSN连接到具有以下结构的Planetscale数据库之后:

代码语言:javascript
复制
user:password@tcp(host)/database?tls=true

我决定通过运行一个简单的查询来测试它。这是我的main.go文件:

代码语言:javascript
复制
package main

import (
    "database/sql"
    "fmt"
    "os"

    _ "github.com/go-sql-driver/mysql"
)

func GetDatabase() (*sql.DB, error) {
    db, err := sql.Open("mysql", os.Getenv("DSN"))
    return db, err
}

func main() {
    db, err := GetDatabase()
    if err != nil {
        panic(err)
    }
    if err := db.Ping(); err != nil {
        panic(err)
    }
    // ---
    query, err := db.Query("SELECT name FROM status;")
    if err != nil {
        panic(err.Error())
    }
    var name string
    for query.Next() {
        err = query.Scan(&name)
        if err != nil {
            panic(err.Error())
        }
        fmt.Println(name)
    }
    // ---
    fmt.Println("Successfully connected to PlanetScale!")
}

如果删除两个注释行之间的部分,它将打印出“成功连接”消息;但是,如果我尝试运行它(包括查询部分),则结果将更改为: panic: Error 1046: No database所选。

好吧,我决定尝试一下这个查询:

代码语言:javascript
复制
"USE database; SELECT name FROM status;"

但是,默认驱动程序不会接受多个语句并返回语法错误。

我知道这似乎是一个简单的问题,但我已经阅读了来自planetscale、go mysql驱动程序的文档,而且我还无法克服这个小问题。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-05-12 09:50:03

看起来问题在于.env文件。如果我将相同的信息保存到同一个GetDatabase()函数中的字符串变量中,然后将其作为参数而不是os.Getenv()传递,它将正常连接。不知道为什么会这样,但是如果有人能提供更多的信息,我会很感激的。

编辑:

当将我的凭据保存到一个.env文件并使用内置函数os.Getenv(" DSN ")时,程序确实会连接到planetscale,但是它不会在DSN字符串中选择给定的数据库。正如问题中提到的,首先选择数据库,然后运行语句/查询,由于驱动程序的限制,无法工作。

如果我将变量硬编码为字符串变量,例如:

代码语言:javascript
复制
dsn := "root:mlc@tcp(127.0.0.1:3306)/app"

然后使用它来打开连接,这一次程序将使用所需的数据库来解决任何问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72210603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档