You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中通过DBI库将一个SQLite数据库附加到另一个?

问题原因

你的ATTACH语句拼接时没有给数据库文件路径加字符串引号,SQLite会将未加引号的archive.db识别为列/表这类标识符,而非文件路径字符串,因此触发「no such column」报错。

修复方案

两种可行的实现方式,更推荐第二种参数化写法,可自动处理路径中的特殊字符、空格、转义符等情况,避免SQL注入风险。

方式1:手动给路径加单引号

library(DBI)

NewDBFile <- "new.db"
archiveFile <- "archive.db"

con <- dbConnect(RSQLite::SQLite(), NewDBFile)
# 给文件路径包裹单引号
rs <- dbExecute(conn = con, paste0("ATTACH '", archiveFile, "' AS archive;"))

# 验证附加成功:列出archive库中的所有表
print(dbListTables(con, "archive"))

dbDisconnect(con)

方式2:参数化查询(更推荐)

library(DBI)

NewDBFile <- "new.db"
archiveFile <- "archive.db"

con <- dbConnect(RSQLite::SQLite(), NewDBFile)
# 用?做占位符,params参数传入路径值,自动处理转义
rs <- dbExecute(conn = con, "ATTACH ? AS archive;", params = list(archiveFile))

# 验证附加成功:列出archive库中的所有表
print(dbListTables(con, "archive"))

dbDisconnect(con)
注意事项
  • 附加的数据库仅在当前数据库连接的生命周期内有效,断开连接后会自动分离,后续重新连接需要再次执行ATTACH语句。
  • 若需要查询附加库中的表,写法为archive.表名,例如dbGetQuery(con, "SELECT * FROM archive.user_log")。

内容的提问来源于stack exchange,提问作者Lia_G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:21:02