我在我的网络应用程序中使用 npm sqlite3 包来创建一个模拟餐厅。当我的本地服务器启动时,我正在创建一个menuItems
table:
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 文件分开。我能想到的选项:
- 使用当前的硬编码命令将单个项目插入表中。
- 使用SQLite3导入CSV文件并将其插入到表中。
- 从 CSV 文件中读取项目并将其插入循环中。
- 服务器启动前建立数据库并传入
sqlite3.Database()
构造函数。
我愿意选择选项 2。不过,我愿意接受任何建议。有一些方法可以使用 SQLite 导入 CSV 文件 http://www.sqlitetutorial.net/sqlite-import-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
Trying 普通 SQL 语法 https://stackoverflow.com/questions/15242757/import-csv-file-into-sql-server:
.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我没试过。