简单的 SQL Lite 表/导入问题
-
16-09-2020 - |
题
我有一个简单的 SQL 问题。我想创建一个 3 列数据库,我有以下代码:
sqlite3 meshdb.db "create table t1 (t1key INTEGER PRIMARY KEY, prideID, pubmedID);"
当我尝试导入包含两列(prideID 和 pubmedID)的简单 csv 文件时,出现“预期有 3 列数据,但发现了 2 列”错误。我希望 t1key 是一个整数,并在添加新字段时自动计数。我是否必须将 NOT NULL 放在 PRIMARY KEY 前面才能使其工作?
解决方案
.import
不支持重塑输入(除了设置分隔符)。您需要将CSV文件导入临时表和插入到真实表中。这是一个示例会话:
$ cat a.csv
1,2
3,4
5,6
$ sqlite3 a.db
SQLite version 3.6.23.1
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table foo(id integer primary key,x,y);
sqlite> create temp table footmp(x,y);
sqlite> .separator ,
sqlite> .import a.csv footmp
sqlite> select * from footmp;
1,2
3,4
5,6
sqlite> insert into foo(x,y) select * from footmp;
sqlite> select * from foo;
1,1,2
2,3,4
3,5,6
sqlite> drop table footmp;
.
你看到id被计算起来。这是因为具有类型整数键的列被视为内部ROWID的别名 - 这始终是唯一的升序。
其他提示
代替 insert
使用
create table newtable as select * from footmp;
它更好更快。
与sqlite的.versversy我所做的就是确保在开始导入之前设置分隔符。我确实为每行指定了ID值,因此,CSV中的第一列是一组唯一的整数
不隶属于 StackOverflow