您正在使用脚本语言。这样做实际上是为了避免手动输入每个数据点。对不起。
你有两条路线:
1:您已更正加载数据库连接并在 SQLite 数据库中创建了一个空表。好的!
要将数据加载到表中,请使用例如df <-
read.table('textfile.txt', sep='|')
(修改参数以适合您的文本文件)将您的文本文件加载到 R 中。
要拥有“动态”INSERT 语句,您可以使用占位符。RSQLite 允许命名或定位占位符。要插入单行,您可以执行以下操作:
dbSendQuery(db, 'INSERT INTO table1 (MARKS, ROLLNUM, NAME) VALUES (?, ?, ?);', list(1, 16, 'Big fellow'))
你看?第一个?
得到值1
,第二个?
得到值16
,最后一个?
得到字符串Big fellow
。另请注意,您不要将文本的占位符括在引号('
或"
)中!
现在,您有数千行。或者不止一个。无论哪种方式,您都可以发送数据框。dbSendQuery
有一些要求。1)每个向量具有相同数量的条目(在提供 data.frame 时不是问题)。并且 2) 您只能提交与占位符相同数量的向量。
我假设您的数据框df
包含对应于列的列mark
、、roll
和name
。然后你可以运行:
dbSendQuery(db, 'INSERT INTO table1 (MARKS, ROLLNUM, NAME) VALUES (:mark, :roll, :name);', df)
这将为df
!中的每一行执行一个 INSERT 语句。
小费!因为每行都会执行一个 INSERT 语句,所以插入数千行可能需要很长时间,因为每次插入后,数据都会写入文件并更新索引。插入,将其包含在事务中:
dbBegin(db)
res <- dbSendQuery(db, 'INSERT ...;', df)
dbClearResult(res)
dbCommit(db)
SQLite 会将数据保存到日志文件中,并且仅在您执行dbCommit(db)
. 尝试两种方法并比较速度!
2:啊,是的。第二种方式。这可以完全在 SQLite 中完成。使用 SQLite 命令实用程序(sqlite3
来自命令行,而不是 R),您可以将文本文件附加为表格并简单地执行INSERT INTO ... SELECT ... ;
命令。或者,将文本文件读sqlite3
入临时表并运行INSERT INTO ... SELECT ... ;
.
有用的网站要记住:http ://www.sqlite.com/lang.html