我是sqlite3的新手,我正在尝试使用我手上的一些数据。
我目前遇到的问题是我甚至无法在shell中创建表格。我正在尝试运行
.mode csv
.import filename tab1
但是我收到了这个错误
CREATE TABLE tab1(...) failed: duplicate column name: B-
由于我正在导入一个.csv文件,我想也许我的列名中有一个副本,但它们似乎都与我截然不同。有人能指出我正确的方向吗?我真的很感激: - )
以下是我的.csv文件的简短摘录:
SID,Name,Cohort,Email,Gender,Ethnicity,Major,Grades,More grades,Last grades,Not sure,,
24239361,name1,Cohort 1-Fall 2013,name1@email.com,Female,Chinese,CS,B,C+,B-,B-,,
24474707,name2,Cohort 1-Fall 2013,name2@email.com,Male,Chinese,CS,B,B+,B-,B-,,
24266062,name3,Cohort 1-Fall 2013,name3@email.com,Male,White,CS,B-,B-,C,B ,,
更新: 编辑我的csv文件现在只有:
SID,Name,Cohort
24239361,Name1,Cohort 1-Fall 2013
24474707,Name2,Cohort 1-Fall 2013
24266062,Name3,Cohort 1-Fall 2013
22181134,Name4,Cohort 1-Fall 2013
当我导入它并执行.schema时,我得到了这个:
CREATE TABLE foo(
"SID" TEXT,
"Name" TEXT,
24239361" TEXT,
"Name1" TEXT,
24474707" TEXT,l 2013
"Name2" TEXT,
24266062" TEXT,l 2013
"Name3" TEXT,
22181134" TEXT,l 2013
"Name4" TEXT,
24527147" TEXT,l 2013
这真的很奇怪,因为我正在跳过标题栏“同类群组”,而是将以下所有行读到列
答案 0 :(得分:2)
sqlite3
工具要求CSV文件中的换行符为CR + LF(在RFC 4180中指定)。
您的文件如下所示:
00000000: 53 49 44 2c 4e 61 6d 65 2c 43 6f 68 6f 72 74 0d SID,Name,Cohort. 00000010: 32 34 32 33 39 33 36 31 2c 41 6c 6c 69 73 6f 6e 24239361,Xxxxxxx 00000020: 20 43 6f 72 69 6e 6e 65 20 59 65 65 2c 43 6f 68 Xxxxxxx Xxx,Coh 00000030: 6f 72 74 20 31 2d 46 61 6c 6c 20 32 30 31 33 0d ort 1-Fall 2013. 00000040: 32 34 34 37 34 37 30 37 2c 41 6e 74 68 6f 6e 79 24474707,Xxxxxxx ...
此文件包含Mac行结尾(仅CR),该文件对普通文本文件有效。
您可以在设置CSV模式后手动更改行分隔符:
.mode csv
.sep , \r
答案 1 :(得分:1)
我无法重现您的问题完全,但是当我尝试使用您的示例数据时,我得到以下不完全相同的错误:
CREATE TABLE tab1(...) failed: duplicate column name:
原因是你的第一行末尾的那两个逗号(代表新表的列)。 SQLite尝试使用空白名称创建两个列,并在第二个列上失败。解决方案是从文件的每一行中删除这些逗号,或者为这些字段提供有效的列名。
我无法专门重现您的问题,但看起来SQLite由于某种原因没有看到第一行,并且正在尝试根据下一行(其中包含多个字段)设置列值B-
,导致与上述相同的问题)。你需要追踪发生这种情况的原因。或者,您可以先创建表,然后在导入之前从文件中删除列标题行:
CREATE TABLE tab1 (SID INTEGER, Name TEXT, ...);
.mode csv
.import filename tab1