【发布时间】:2019-01-15 23:43:49
【问题描述】:
我在我的网络应用程序中使用 npm sqlite3 包作为模拟餐厅(用于学习目的)。在我当前的实现中,当我的本地服务器启动时,我正在创建一个menuItems 表,如下所示:
var db = new sqlite3.Database(':memory:');
db.serialize(function() {
db.run('CREATE TABLE menuItems ('
+ 'itemName VARCHAR(255),'
+ 'itemDescription VARCHAR(255),'
+ 'unitPrice REAL'
+ ');')
.run("INSERT INTO menuItems (itemName, itemDescription, unitPrice) VALUES"
+ " ('Fish Filet', 'Yummy fish in a sandwich.', 9.95)")
});
但是,我希望我的 menuItems 表不被硬编码到 js 文件中,并且希望实际项目与此 js 文件分开。有几个我能想到的解决方案:
使用当前实现和硬编码命令将单个项目插入表中。
使用SQLite3导入
csv文件并插入到表中。*从
csv文件中读取项目并通过循环插入它们。在服务器启动之前建立数据库并将其传递给
sqlite3.Database()构造函数。
*我想选择选项 2。但是,由于这是出于学习目的,我愿意接受任何建议,包括但不限于使用不同的数据库管理包或使用不同的类型文件(可能只是一个txt 文件或其他东西)。
我知道有some ways 可以使用SQLite3 导入csv 文件。我正在尝试做同样的事情,但来自sqlite3 npm 包。当我尝试通过链接页面中的相同命令(这似乎是特定于 sqlite3 的命令)导入文件时,
db.run('.import "C:/Users/path/to/csv/file.csv"'
+ 'INTO TABLE menuItems'
+ 'FIELDS TERMINATED BY ","'
+ 'ENCLOSED BY "\'"'
+ 'LINES TERMINATED BY \'\\n\''
+ 'IGNORE 1 ROWS'
+ ');');
我收到错误提示
events.js:183
throw er; // Unhandled 'error' event
^
Error: SQLITE_ERROR: near ".": syntax error
尝试使用normal SQL syntax,
.run('BULK INSERT menuItems'
+ 'FROM "C:/Users/path/to/csv/file.csv" '
+ 'WITH '
+ '{ '
+ 'FIRSTROW = 2,'
+ 'FIELDTERMINATOR = ","'
+ 'ROWTERMINATOR = "\n",'
+ 'ERRORFILE = "C:/Users/path/to/csv/error_file.csv" '
+ 'TABLOCK'
+ '}')
我收到错误提示
events.js:183
throw er; // Unhandled 'error' event
^
Error: SQLITE_ERROR: near "BULK": syntax error
我的语法有什么不正确的吗?有没有更好/工作/更有效的方法来做到这一点?选项 3 似乎可行,但我还没有尝试过。
【问题讨论】:
-
能分享一下实现的代码吗?我一直在这样做,但仍然出现错误。
标签: node.js sqlite node-sqlite3