web-dev-qa-db-ja.com

.sqlまたは.csvファイルをSQLiteにインポートする方法は?

。sqlまたは。csvファイルをSQLiteにダンプする必要があります(SQLite3 APIを使用しています)。データベース全体ではなく、テーブルのインポート/ロードに関するドキュメントのみを見つけました。今、私がタイプするとき:

sqlite3Prompt> .import FILENAME TABLE 

データベース全体ではなくテーブルを想定しているため、構文エラーが発生します。

115
happythenewsad

SQLファイルからインポートするには、次を使用します。

sqlite> .read <filename>

CSVファイルからインポートするには、ファイルタイプと宛先テーブルを指定する必要があります。

sqlite> .mode csv <table>
sqlite> .import <filename> <table>
161
Jay Igor

次のようなコマンドから実行してみてください。

cat dump.sql | sqlite3 database.db

これは明らかに、dump.sqlのSQLステートメントでのみ機能します。 CSVをインポートする方法がわかりません。

26
Kyle Cronin

SQLite DBを使用したSCRATCHから、CSVをテーブルにインポートするには:

  • Webサイトから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>
22
Jake Wyman

Sqlite3 .importコマンドは、引用符で囲まれた文字列内でもカンマを区切り文字として扱うため、通常のcsvデータでは機能しません。

これには、シェルによって作成された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ファイルを処理する提案を見つけました。それを調べます。

11
blairxy

(python)スクリプトを使用することに満足している場合は、これを自動化するpythonスクリプトがあります。 https://github.com/rgrp/csv2sqlite

これにより、テーブルが自動的に作成されるだけでなく、基本的な型推測とデータキャストが行われます(たとえば、数値を計算して、列の型を "real"に設定します)。

10
Rufus Pollock

SQLiteのデフォルトの区切り文字はパイプ「|」であることに注意してください

sqlite> .separator ";"

sqlite> .import path/filename.txt tablename 

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

7
DnD

windowsで使用している場合は、dbのパスを ""に追加し、パスに二重スラッシュ\を使用して、Windowsがそれを理解できるようにしてください。

1
MahD

Termsqlをチェックしてください。 https://gitorious.org/termsqlhttps://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
user3573558

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);

次に、2つのファイル:

# 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などのMySQLのような他のRDBでできるように、SQLite SQLでLOAD DATA INFILEステートメントを使用できることを意味します。しかし、これは推奨されません。

1
not2qubit

これは、ID列に挿入する方法です。

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には、改行文字で区切られた文字列が含まれています。

列をさらに追加する場合は、デフォルトのパイプ文字を使用して列を簡単に分離できます。

0
live-love