首页 文章

如何导入.sql或.csv文件加载到SQLite?

提问于
浏览
114

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

sqlite3prompt> .import FILENAME TABLE

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

11 回答

  • 1

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

    sqlite> .read <filename>
    

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

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

    尝试从命令执行此操作,如:

    cat dump.sql | sqlite3 database.db
    

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

  • -1

    从使用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>
    
  • 21

    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文件的建议,我将调查一下 .

  • 7

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

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

  • 1

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

    sqlite> .separator ";"
    
    sqlite> .import path/filename.txt tablename
    

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

  • 10

    SQLite非常灵活,因为它还允许SQL语法中的SQLite特定dot commands(尽管它们由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中一样,例如使用 LOAD DATA INFILE 等的MySQL . 但是,不建议这样做 .

  • 11

    查看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
    
  • 1

    如果你在Windows中使用它,请确保在“”中添加数据库的路径,并在路径中使用双斜杠\以确保窗口理解它 .

  • 0

    这是您可以插入标识列的方法:

    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包含由换行符分隔的字符串 .

    如果要添加更多列,则使用管道字符(这是默认值)更容易分隔它们 .

  • 25

    使用phpLiteAdmin将csv或sql导入sqlite,非常棒 .

相关问题