您正在使用脚本语言。这样做实际上是为了避免手动输入每个数据点。对不起。
你有两条路线:
1:您已更正加载数据库连接并在 SQLite 数据库中创建了一个空表。不错!
要将数据加载到表中,请使用例如将文本文件加载到 R 中。 df <-
read.table('textfile.txt', sep='|')(修改参数以适合您的文本文件)。
要拥有“动态”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