116

我需要将.sql.csv文件转储到 SQLite(我正在使用 SQLite3 API)。我只找到了导入/加载表的文档,而不是整个数据库。现在,当我输入:

sqlite3prompt> .import FILENAME TABLE 

我收到一个语法错误,因为它需要一个表而不是整个数据库。

4

11 回答 11

166

要从 SQL 文件导入,请使用以下命令:

sqlite> .read <filename>

要从 CSV 文件导入,您需要指定文件类型和目标表:

sqlite> .mode csv <table>
sqlite> .import <filename> <table>
于 2009-06-25T20:08:32.223 回答
26

尝试从以下命令执行此操作:

cat dump.sql | sqlite3 database.db

这显然只适用于 dump.sql 中的 SQL 语句。我不确定如何导入 CSV。

于 2009-06-25T19:59:11.433 回答
22

使用 SQLite DB 从 SCRATCH 到将 CSV 导入表:

  • 从网站获取 SQLite。
  • 在命令提示符处运行sqlite3 <your_db_file_name>*它将被创建为一个空文件。
  • 在新数据库中创建一个新表。该表必须与您的 CSV 字段匹配才能导入。
  • 您可以通过 SQL 命令执行此操作:CREATE TABLE <table_Name> (<field_name1> <Type>, <field_name2> <type>);

创建表并且列与文件中的数据匹配后,您可以执行上述操作...

.mode csv <table_name>
.import <filename> <table_name>
于 2009-11-18T18:20:16.657 回答
11

sqlite3 .import 命令不适用于普通的 csv 数据,因为即使在带引号的字符串中,它也会将任何逗号视为分隔符。

这包括尝试重新导入由 shell 创建的 csv 文件:

Create table T (F1 integer, F2 varchar);
Insert into T values (1, 'Hey!');
Insert into T values (2, 'Hey, You!');

.mode csv
.output test.csv
select * from T;

Contents of test.csv:
1,Hey!
2,"Hey, You!"

delete from T;

.import test.csv T
Error: test.csv line 2: expected 2 columns of data but found 3

看来我们必须将 csv 转换为 Insert 语句列表,或者可能使用不同的分隔符。

在 SuperUser 上,我看到了使用 LogParser 处理 csv 文件的建议,我将对此进行研究。

于 2010-02-22T23:10:36.223 回答
10

如果您乐于使用(python)脚本,那么有一个 python 脚本可以自动执行此操作:https ://github.com/rgrp/csv2sqlite

这将为您自动创建表格,并为您进行一些基本的类型猜测和数据转换(例如,它会计算出一些数字并将列类型设置为“真实”)。

于 2013-04-07T18:35:53.420 回答
7

请记住,SQLite 的默认分隔符是管道“|”

sqlite> .separator ";"

sqlite> .import path/filename.txt tablename 

http://sqlite.awardspace.info/syntax/sqlitepg01.htm#sqlite010

于 2014-04-16T18:35:40.713 回答
2

查看 termsql。https://gitorious.org/termsql https://gitorious.org/termsql/pages/Home

它在命令行上将文本转换为 SQL。(CSV 只是文本)

例子:

cat textfile | termsql -o sqlite.db

默认情况下,分隔符是空格,因此要使其与使用逗号的 CSV 一起使用,您可以这样做:

cat textfile | termsql -d ',' -o sqlite.db

或者你可以这样做:

termsql -i textfile -d ',' -o sqlite.db

默认情况下,它将生成列名“COL0”、“COL1”,如果您希望它使用第一行作为列名,请执行以下操作:

termsql -i textfile -d ',' -1 -o sqlite.db

如果要设置自定义列名,请执行以下操作:

termsql -i textfile -d ',' -c 'id,name,age,color' -o sqlite.db
于 2014-11-22T13:40:22.880 回答
1

SQLite 非常灵活,因为它还允许在 SQL 语法中使用特定于 SQLite 的点命令(尽管它们由 CLI 解释。)这意味着您可以执行这样的操作。

像这样创建一个sms表:

# sqlite3 mycool.db '.schema sms'
CREATE TABLE sms (_id integer primary key autoincrement, Address VARCHAR, Display VARCHAR, Class VARCHAR, ServiceCtr VARCHAR, Message VARCHAR, Timestamp TIMESTAMP NOT NULL DEFAULT current_timestamp);

然后是两个文件:

# echo "1,ADREZZ,DizzPlay,CLAZZ,SMSC,DaTestMessage,2015-01-24 21:00:00">test.csv

# cat test.sql
.mode csv
.header on
.import test.csv sms

要使用 SQL 文件测试 CSV 文件的导入,请运行:

# sqlite3 -csv -header mycool.db '.read test.sql'

总之,这意味着您可以.import在 SQLite SQL 中使用该语句,就像在任何其他 RDB 中一样,例如 MySQLLOAD DATA INFILE等。但是,不建议这样做。

于 2015-01-24T19:40:30.590 回答
1

如果您在 Windows 中使用它,请务必在 "" 中添加到数据库的路径,并在路径中使用双斜杠 \ 以确保 Windows 能够理解它。

于 2016-08-18T14:09:31.033 回答
1

这是您可以插入身份列的方式:

CREATE TABLE my_table (id INTEGER PRIMARY KEY AUTOINCREMENT, name COLLATE NOCASE);
CREATE TABLE temp_table (name COLLATE NOCASE);

.import predefined/myfile.txt temp_table 
insert into my_table (name) select name from temp_table;

myfile.txt 是 C:\code\db\predefined\ 中的一个文件

data.db 位于 C:\code\db\

myfile.txt 包含由换行符分隔的字符串。

如果您想添加更多列,使用竖线字符更容易将它们分隔,这是默认设置。

于 2018-04-24T01:47:18.437 回答
-1

使用phpLiteAdmin将您的 csv 或 sql 导入到 sqlite,非常棒。

于 2016-05-05T09:03:20.160 回答