【问题标题】:Can you use SQLite ATTACH and DETACH in Golang你能在 Golang 中使用 SQLite ATTACH 和 DETACH
【发布时间】:2016-05-14 09:29:22
【问题描述】:

我在 Golang 应用程序中使用 https://github.com/mattn/go-sqlite3。我需要使用多个数据库,并且想知道我是否可以在 Golang 中使用 ATTACH 和 DETACH (http://sqlite.org/lang_attach.html)。

我现在没有任何代码,因为除了创建两个数据库连接并在应用程序中加入数据之外,我不知道如何解决这个问题:

db1, err := sql.Open("sqlite3", "./db1.db")

db2, err := sql.Open("sqlite3", "./db2.db")

// query db1 and db2
// put into map
// join data

如果你可以使用它会更容易:

attach database database1.db as db1;
attach database database2.db as db2;

select
  *
from
  db1.SomeTable a
    inner join 
  db2.SomeTable b on b.SomeColumn = a.SomeColumn;

【问题讨论】:

    标签: go sqlite


    【解决方案1】:

    您可以附加一个数据库,您可以在打开第一个数据库后在 SQL 中执行此操作(为简洁起见,省略错误检查):

    db1, err := sql.Open("sqlite3", "./db1.db")
    defer db1.Close()
    
    s := "attach database '/path/to/db2.db' as db2;"
    
    _, err = db.Exec(s)
    
    s = `select *
         from db1.SomeTable a
         inner join db2.SomeTable b on b.SomeColumn = a.SomeColumn; `
    
    results, err := db.Query(s)
    defer results.Close()
    
    //process results ...
    
    _, err = db.Exec("detach database db2;")
    

    【讨论】:

    • 错误:没有这样的表db1.SomeTable。其中SomeTable 是实际的表名。
    • 如果执行join查询为db1,则from中无需设置db名,使用表名如下:select * from SomeTable a inner join db2.SomeTable b on b .SomeColumn = a.SomeColumn;
    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 2014-12-18
    • 2011-04-07
    • 2011-12-22
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多