我需要将一个 .sql 或者 .csv 文件导入到 SQLite 中(我正在使用 SQLite3 API)。我只能找到导入/加载表的文档,而没有找到导入整个数据库的文档。目前,当我输入以下命令时:
sqlite3prompt> .import FILENAME TABLE
我得到了一个语法错误,因为它期望的是一个表而不是整个数据库。
我需要将一个 .sql 或者 .csv 文件导入到 SQLite 中(我正在使用 SQLite3 API)。我只能找到导入/加载表的文档,而没有找到导入整个数据库的文档。目前,当我输入以下命令时:
sqlite3prompt> .import FILENAME TABLE
我得到了一个语法错误,因为它期望的是一个表而不是整个数据库。
要从一个 SQL 文件中导入数据,请使用以下代码:
sqlite> .read <filename>
要从CSV文件导入数据,您需要指定文件类型和目标表:
sqlite> .mode csv <table>
sqlite> .import <filename> <table>
尝试从命令行执行:
cat dump.sql | sqlite3 database.db
这显然只适用于dump.sql中的SQL语句。我不知道如何导入CSV文件。
.mode csv
。 - FilBot3从零开始使用SQLite DB到将CSV导入表格:
sqlite3 <your_db_file_name>
*将创建一个空文件。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转换成一系列插入语句的列表,或者也许使用不同的分隔符会起作用。
在SuperUser上,我看到了使用LogParser处理csv文件的建议,我要研究一下。
sqlite3.ProgrammingError: 除非您使用能够解释8位字节串的 text_factory(如 text_factory = str),否则不要使用8位字节串。强烈建议您将应用程序转换为Unicode字符串
# csv2sqlite.py {csv文件路径} {sqlite数据库路径} [{表名}] - Marcossqlite> .separator ";"
sqlite> .import path/filename.txt tablename
http://sqlite.awardspace.info/syntax/sqlitepg01.htm#sqlite010
请查看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
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包含由换行符分隔的字符串。
如果您想添加更多列,最好使用竖线字符进行分隔,这是默认设置。
SQLite非常灵活,因为它还允许在SQL语法中使用SQLite特定的dot命令(尽管它们由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
语句,就像在其他RDB(如使用LOAD DATA INFILE
的MySQL)中一样。然而,这并不推荐使用。如果您在Windows中使用它,请确保在""中添加到数据库的路径,并且在路径中使用双斜杠\以确保Windows能够理解它。