gpt4 book ai didi

mysql - 通过 App Engine 使用 Cloud SQL 时如何选择要查询的数据库?

转载 作者:行者123 更新时间:2023-11-29 10:24:07 26 4
gpt4 key购买 nike

我收到以下错误:

Could not query db: Error 1046: No database selected

我明白错误消息的含义。但我找不到说明如何选择数据库的文档。

这是我的代码:

package main

import (
"database/sql"
"fmt"
"log"
"net/http"
"os"
"time"

"google.golang.org/appengine"

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

var db *sql.DB

func main() {
var (
connectionName = mustGetenv("CLOUDSQL_CONNECTION_NAME")
user = mustGetenv("CLOUDSQL_USER")
password = os.Getenv("CLOUDSQL_PASSWORD")
)

var err error
db, err = sql.Open("mysql ", fmt.Sprintf("%s:%s@cloudsql(%s)/", user, password, connectionName))
if err != nil {
log.Fatalf("Could not open db: %v", err)
}

http.HandleFunc("/", handler)
appengine.Main()
}

func handler(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}

w.Header().Set("Content-Type", "text/plain")

rows, err := db.Query("INSERT INTO ping ( ping ) VALUES ( '" + time.Now().Format("2006-01-02 03:04:05") + "' );")
if err != nil {
http.Error(w, fmt.Sprintf("Could not query db: %v", err), 500)
return
}
defer rows.Close()

w.Write([]byte("OK"))
}

func mustGetenv(k string) string {
v := os.Getenv(k)
if v == "" {
log.Panicf("%s environment variable not set.", k)
}
return v
}

最佳答案

您似乎指定了 CONNECTION_NAME,但没有指定 DB_NAME。根据the documentation (向下滚动到“GO > Companion process”部分),您应该打开连接:

import (
"github.com/go-sql-driver/mysql"
)

dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s",
dbUser,
dbPassword,
"127.0.0.1:3306",
dbName)
db, err := sql.Open("mysql", dsn)

这段代码与您的类似,但您没有指定 dbName 参数。请记住,其余配置应与您在代码中共享的相同,但您只需将数据库名称附加到 sql.Open() 函数的第二个参数即可。

在从 App Engine Flexible to Cloud SQL 连接的示例中使用 GO,可以识别相同的过程:

db, err = sql.Open("mysql", dbName)

所以我想你应该尝试这个改变:

// Old connection opening
db, err = sql.Open("mysql ", fmt.Sprintf("%s:%s@cloudsql(%s)/", user, password, connectionName))
// New connection opening, including dbName
db, err = sql.Open("mysql ", fmt.Sprintf("%s:%s@cloudsql(%s)/%s", user, password, connectionName, dbName))

我自己对 GoLang 并不是很熟悉,但根据文档,这应该可行。

关于mysql - 通过 App Engine 使用 Cloud SQL 时如何选择要查询的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48641367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com