如何将.sql 或.csv 文件导入到 SQLite 中?

我需要将 。 sql。 CSV文件转储到 SQLite 中(我使用的是 SQLite3API)。我只找到了导入/加载表的文档,没有找到整个数据库。现在,当我输入:

sqlite3prompt> .import FILENAME TABLE

我得到一个语法错误,因为它期望的是一个表,而不是一个完整的数据库。

181278 次浏览

试着从以下命令执行:

cat dump.sql | sqlite3 database.db

很明显,这只能用于 Dump.SQL 中的 SQL 语句,我不确定如何导入 CSV。

要从 SQL 文件导入,请使用以下方法:

sqlite> .read <filename>

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

sqlite> .mode csv <table>
sqlite> .import <filename> <table>

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

  • 从网站获取 SQLite。
  • At a command prompt run sqlite3 <your_db_file_name> *It will be created as an empty file.
  • Make a new table in your new database. The table must match your CSV fields for import.
  • 您可以通过 SQL 命令 CREATE TABLE <table_Name> (<field_name1> <Type>, <field_name2> <type>);来完成这项工作

一旦您创建了表,并且列与文件中的数据相匹配,那么您就可以执行以上操作..。

.mode csv <table_name>
.import <filename> <table_name>

那个 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 文件的建议,我将对此进行研究。

如果您愿意使用(python)脚本,那么有一个 python 脚本可以在 https://github.com/rgrp/csv2sqlite自动完成这项工作

这将为您自动创建表,并为您执行一些基本的类型猜测和数据强制转换(例如,它将计算出某个数字并将列类型设置为“ real”)。

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

sqlite> .separator ";"


sqlite> .import path/filename.txt tablename

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

Check out 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

By default it will generate column names "COL0", "COL1", if you want it to use the first row for the columns names you do this:

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

如果要设置自定义列名,可以这样做:

termsql -i textfile -d ',' -c 'id,name,age,color' -o sqlite.db

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'

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

导入您的 csv 或 sql 到 sqlite 与 PhpLiteAdmin,这是非常好的。

如果您在 windows 中使用它,请确保将 db 的路径添加到“”中,并在路径中使用双斜杠,以确保 windows 能够理解它。

This is how you can insert into an identity column:

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;

Txt 是 C: code db 预定义的文件

Db 在 C 语言中: 代码 db

Txt 包含由换行符分隔的字符串。

如果希望添加更多的列,使用管道字符(默认值)分隔它们会更容易。