【问题标题】:Importing data to sqlite将数据导入sqlite
【发布时间】:2012-05-26 15:08:56
【问题描述】:

有人,请帮帮我,因为我的头要爆炸了。

我正在尝试在 sqlite3 中导入数据。我有 promos.sqlpromos.csv 文件。我尝试在 sqlite shell 中运行它:

.read promos.sql

或者在 unix 提示符下执行此操作:

sqlite3 development.sqlite3<promos.sqlite3

每次出现错误

错误:第 1 行附近:“,”附近:语法错误 错误:第 18 行附近:“,”附近:语法错误等

文件中有以下行:

INSERT INTO promos (name, promo_type, category, phone, email, message, created_at)  VALUES  
('John', 1, 3, '+111 11 111 111 11', 'some@email.com', 'Some message', '2009-09-24 12:17:17'),etc

因此,它会在列枚举的每一行中抱怨错误。

如果我尝试

.import promos.csv promos

上面写着:

错误:promos.csv 第 1 行:预期 9 列数据,但找到 1

但文件中有 9 列,如预期:

"13","John","1","3","+111 11 111 111 11","some@email.com","Some message","2009-09-24 15:17 :17", "2009-09-24 15:17:17"

为什么它不起作用?

【问题讨论】:

    标签: sql csv import sqlite


    【解决方案1】:

    对于 sql 问题:您的 INSERT 语句末尾是否有逗号,而不是应有的分号?请发布您尝试运行的几行 sql 文件,并发布 promos 的 CREATE TABLE 语句。

    对于 csv 问题:sqlite 使用 |作为默认分隔符,因此您必须将其设置为使用逗号。此外,sqlite 导入不识别带引号的列,因此如果您的数据中有逗号,您最好使用不同的方法来导入数据。详情请见this article

    【讨论】:

    • 非常感谢。你让我有一个正确的想法。最初我使用像 INSERT INTO tbl_name (col_A,col_B) VALUES (1,2,3), (4,5,6), (7,8,9); 这样的句子,但似乎 sqlite 不支持这种格式。因此,我为每条记录创建了新的 SQL 文件,其中包含单独的查询,并且它可以正常工作。
    • 是的,SQL 通常不支持该语法。你要么需要单独的 INSERT 语句,要么你可以做类似INSERT INTO mytable SELECT 'aValue', 'another value' UNION SELECT '2nd row', 'some value' UNION SELECT 'this is the 3rd row', 'xxx' ...
    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2014-01-23
    相关资源
    最近更新 更多