database - 内存中的sqlite出现“没有这样的表”错误
问题描述
我正在使用内存中的sqlite,如下所示。
func init() {
global.ConductorConfig = readConfig()
log.Println(utils.GetCurrentDir() + global.ConductorConfig.DbFile)
//db = sqlx.MustConnect("sqlite3", utils.GetCurrentDir()+global.ConductorConfig.DbFile)
db = sqlx.MustConnect("sqlite3", ":memory:")
db.Exec(schema)
task:=model.Task{}
SaveTask(&task)
db.MapperFunc(func(s string) string {
return s
})
}
在我的主要功能中,我创建了表格
if global.ConductorConfig.DevMode {
db.CreateTables()
}
go job.HeartbeatJob()
go job.TaskClearJob()
app.Action = func(c *cli.Context) error {
ListenAndServe()
return nil
}
然后我在http处理函数中去'没有这样的表'。
existed, err := db.GetAgentByServerName(agent.ServerName)
if err != nil {
c.JSON(http.StatusBadRequest, err)
log.Println("[conductor] error occurred when get agent by server name: " + err.Error())
return err
}
func GetAgentByServerName(name string) (*model.Agent, error) {
agent := &model.Agent{}
err := db.Get(agent, "select * from agent where ServerName=$1", name)
if err == sql.ErrNoRows {
err = nil
agent = nil
}
return agent, err
}
当我启动程序时,我得到了
通过服务器名称获取代理时发生错误:没有这样的表:代理
db 模式(属性省略)
var schema = `
DROP TABLE IF EXISTS agent;
CREATE TABLE agent (
Id INTEGER PRIMARY KEY,
);
DROP TABLE IF EXISTS task;
CREATE TABLE task (
Id INTEGER PRIMARY KEY,
);
我不能分享所有代码,这里有一个重现相同错误的最小示例。
package main
import (
"github.com/jmoiron/sqlx"
_ "github.com/mattn/go-sqlite3"
"log"
)
var db *sqlx.DB
func init() {
db = sqlx.MustConnect("sqlite3", ":memory:")
db.Exec("CREATE TABLE agent (Id INTEGER PRIMARY KEY,);")
}
func main() {
_, err:=db.Exec("insert into agent values (1)")
if err!=nil{
log.Println(err)
}
}
解决方案
也许这会对某人有所帮助
我对“没有这样的桌子”有同样的问题,并找到了一个确切的解释:
如果 sql.Rows 在下一个查询之前未关闭,则驱动程序在下一个查询中不返回此类表。仅内存存储存在问题,文件支持的数据库的相同测试运行良好。
之后,我找到了我忘记做的代码部分rows.Close()
,修复了它,现在它可以正常工作了。
原始答案:https ://github.com/mattn/go-sqlite3/issues/511#issuecomment-396290916
推荐阅读
- javascript - 对具有小数/点数的对象数组进行排序
- list - SwiftUI 拖放与列表
- laravel - 减少在 laravel 中打开时间的问题
- java - 使用 selenium webdriver 的多语言自动化测试
- vue.js - Vue 部署到 Heroku,CircleCI 失败:致命:不是 git 存储库(或任何父目录):.git
- python - Python Pandas Multiindexing选择匹配列表中所有值的行
- r - 为数据框中的新列创建嵌套属性
- javascript - 下拉列表问题
- javascript - 错误处理的 PropTypes.func.isRequired 的行为
- r - 如何计算 R 中每列值的频率组合?