如何在SQLite中正确地导入CSV而不引用?

时间:2014-07-02 23:43:08

标签: sqlite csv

我想将CSV文件中的电子邮件列表导入sqlite。当我将其导入sqlite时,CSV还不包含引号,它会为数据添加引号。有更好的进口方式吗?

到目前为止,我一直在做:

 .mode csv
 .header on
 .import "email.csv" emailDatabase

然而,通过这样做,当我搜索emailDatabase时,数据有"参赛作品。

一个例子。

CSV文件包含以下电子邮件:

abc@yahoo.com
def@gmail.com

但是,使用上述方法导入时,表格将导致:

" abc@yahoo.com"
" def@gmail.com"

注意"用于包装每行的数据,并在第一个"之后包含一个空格。如何进行导入以便不添加报价?

2 个答案:

答案 0 :(得分:2)

我正在做一些测试,并意识到如果CSV文件的标题在开头包含空格,sqlite将添加引号,因为它认为该空间应该包含在名称中。

e.g。

 Email
 abc@gmail.com
 def@yahoo.com

(注意电子邮件前的空格和数据)如果在sqlite中导入为:

" Email"
" abc@gmail.com"
" def@yahoo.com"

但是,如果标题在不添加引号之前不包含单个空格,而是显示为:

Email
 abc@gmail.com
 def@yahoo.com

请注意实际数据前的空格。数据仍然包含空格,但sqlite不会在它们周围添加引号。

我不确定为什么会这样,但事情就是如此。

答案 1 :(得分:0)

从.csv文件导入城市名称时出现相同的问题。 .import将弗吉尼亚海滩写成“弗吉尼亚海滩”。希望我能提供比Python程序更好的答案,但是(就其价值而言)就在这里。

#!/usr/bin/python
import csv
import sqlite3

conn = sqlite3.connect("test.db")

conn.execute("CREATE TABLE cities(name TEXT, population INTEGER)")

with open("cities.csv", "r") as ifile:
    reader = csv.reader(ifile, delimiter = ",")
    for record in reader:
        sql = "INSERT INTO cities (name, population) VALUES('{0}',{1})".format(record[0], record[1])
        conn.execute(sql)

conn.commit()

conn.close()