将可变数量的列导入 SQLite 数据库

标签 import sqlite

我有一个 csv 文件格式的同义词列表:word,meaning1,meaning2,meaning3....

不同的单词具有不同数量的同义词,这意味着行可能具有可变数量的列。我正在尝试将 csv 文件导入到 sqlite 数据库中,如下所示:

    sqlite3 synonyms
    sqlite> create table list(word text, meaning0 text, meaning1 text, meaning2 text, meaning3 text, meaning4 text, meaning5 text, meaning6 text, meaning7 text, meaning8 text, meaning9 text);
sqlite> .mode list
sqlite> .separator ,
sqlite> .import ./csv/synonyms.csv list 

为了安全起见,我假设了最大。每个单词的 10 列数。对于同义词少于 10 个的单词,其他列应为 null。我在执行 import 命令时遇到的错误是:

Error: ./csv/synonyms.csv line 1: expected 11 columns of data but found 3  

我的问题:
1. 如果列数小于10,如何告诉SQLite将其替换为null
2. 有什么方法可以指定我想要在单词后 10 列而不是自动输入吗?

最佳答案

您可以执行以下操作:

  • 将所有数据导入单列;
  • 更新表格,将列内容拆分为其他列。

示例:

-- Create a table with only one column;
CREATE TABLE table_name(first);
-- Choose a separator which doesn't exist within file
.separator ~
-- Import data
.import file.csv table_name

-- Add another column to split data
ALTER TABLE table_name ADD COLUMN second;
-- Split data between first and second column
UPDATE table_name SET first=SUBSTR(first, 1, INSTR(first, ",")-1), second=SUBSTR(first, INSTR(first, ",")+1) WHERE INSTR(first, ",")>0;

-- Repeat to next column
ALTER TABLE table_name ADD COLUMN third;
-- Split data between second and third column
UPDATE table_name SET second=SUBSTR(second, 1, INSTR(second, ",")-1), third=SUBSTR(second, INSTR(second, ",")+1) WHERE INSTR(second, ",")>0;

-- And so on...
ALTER TABLE table_name ADD COLUMN fourth;
UPDATE table_name SET third=SUBSTR(third, 1, INSTR(third, ",")-1), fourth=SUBSTR(third, INSTR(third, ",")+1) WHERE INSTR(third, ",")>0;

-- Many times as needed...

这不是最佳方法,性能应该使其足够快。

关于将可变数量的列导入 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18959356/

相关文章:

python - 从 Elm 中的嵌套目录导入模块?

python - 将多个 CSV 文件导入到同名变量中

java - SQLite 用户名与 EditText 值进行检查

python - 元组 NumPy 数据类型

sqlite - 在Windows7中运行SQLite3-不起作用(除非我以管理员身份运行)

android - 从 sqlite 数据库在 android 应用程序中显示特殊字符

python - 使用 SQLite 从 XML 导入数据模型时无法转义表或列名

linux - 在 Linux/Unix 中将密码从文件导入 CLI 命令参数

apache-spark - Sqoop 可以用于在 IMPORT 上执行联接吗?

javascript - 什么时候应该使用花括号进行 ES6 导入?