我正在使用go-sqlite3。我可以在Golang中使用ATTACH
和DETACH
吗?除了创建两个数据库连接并在应用程序中连接数据之外,我不知道还有什么方法可以使用多个数据库:
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;
2条答案
按热度按时间dzhpxtsq1#
您可以附加一个数据库,您可以在打开第一个数据库后在SQL中执行此操作(为简洁起见,省略错误检查):
l2osamch2#
no such table
错误***有时***会发生,因为sql.DB
是连接池。Query()
(2)可能发生在与Exec()
(1)不同的连接上。解决此问题的最简单方法是在执行
ATTACH
之前请求单个连接随后使用
conn
将具有附加的DB。一个更复杂的替代方法是创建一个新的驱动程序来 Package 原始驱动程序,但新驱动程序在将新连接传递到
sql.DB
之前会执行一些额外的初始化,如ATTACH。例如:https://pkg.go.dev/github.com/mattn/go-sqlite3#hdr-Go_SQlite3_Extensions