2016-05-14 5 views
3

Ich verwende https://github.com/mattn/go-sqlite3 in einer Golang-Anwendung. Ich muss mehrere Datenbanken verwenden und fragte mich, ob ich ATTACH und DETACH in Golang (http://sqlite.org/lang_attach.html) verwenden kann.Können Sie SQLite ATTACH und DETACH in Golang verwenden

ich jetzt keinen Code habe, weil ich weiß nicht, wie sonst, außer der Schaffung von zwei Datenbankverbindungen, dieses Problem in Angriff zu nehmen und in den Anwendungsdaten Beitritt:

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

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

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

Es wäre viel einfacher, wenn Sie verwenden:

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; 

Antwort

6

Sie können eine Datenbank anhängen, würden Sie es in SQL tun, nachdem die erste Datenbank öffnen (Fehlerprüfung der Kürze halber weggelassen):

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;") 
Verwandte Themen