SQLiteスクリプトを実行する


99

次のコマンドを使用して、sqlite3バージョン3.7.7、UNIX 11.4.2を起動します。

sqlite3 auction.db

auction.dbはまだ作成されていません。

sqlite> auction.db < create.sql;

私にこのエラーを与えます: near "auction": syntax error

スクリプトを実行するにはどうすればよいですか?

回答:


127

これを行うには多くの方法があります。1つの方法は次のとおりです。

sqlite3 auction.db

に続く:

sqlite> .read create.sql

一般的に、SQLiteプロジェクトには本当に素晴らしいドキュメントがあります。ドキュメントの前にGoogleに連絡することがよくありますが、SQLiteの場合、ドキュメントは本当にテクニカルな執筆です。クリーン、クリア、そして簡潔です。


4
scritpsで使用するためには、あなたが実行することができます.readから直接コマンドをsqlite3コマンド:sqlite3 autction.db '.read create.sql'
Cris Luengo

145

あなたは餌にしたいcreate.sqlにしsqlite3ないSQLiteの自身の内側から、シェルから:

$ sqlite3 auction.db < create.sql

SQLiteのSQLバージョンは<ファイルを認識しませんが、シェルは認識します。


1
残念ながら、すべてのシェルが<入力リダイレクトとして理解するわけではありません。(PowerShellなど)
Alan

@Alan PowerShellには、いくつかの入力リダイレクトメカニズムがあります。そして、そうでなければ常にbitopsのアプローチがあります。
muが短すぎる

@muistooshort bitopsへの私のコメントを参照してください。sqliteドットコマンドはsqlステートメントパラメータで機能するため、入力のリダイレクトに頼らずに必要なファイルを.readできます。
Chris Becke

@ChrisBecke彼らは異なるソリューションです。<SQLiteプロンプトをすぐに終了し、エラーコードをシェルに返します。.read file.sqlプロンプトはそのままにし、-init file.sql常に0を返す<ため、スクリプト作成に最適です。また、.readWindowsパスをサポートしないクロスプラットフォームとは異なります。
TWiStErRob

23

単純なクエリを実行してシェルスクリプトに戻るには、これがうまく機能すると思います。

$ sqlite3 example.db 'SELECT * FROM some_table;'

2
これは事実上、muは短すぎます。
大佐32

11
@ColonelThirtyTwoはい、これはmuに非常に近いですが短すぎる答えです。私は、追加の答えを追加した理由はすぐにインラインコマンドを実行するのではなく、中にコマンドを格納するSQLファイルを作成する追加のステップを取ることにする方法を実証することであった。
remeika

5
@remeika私は、インラインコマンドを実行するより慣用的な方法はsqlite3 example.db 'SELECT * FROM some_table;'、エコーをパイプ処理するのではなく、だと思います
Christopher Shroba

1
また、(編集後)、sqlite3からだけstdinでなく、最後の引数からも実行するコマンドを読み取ることを示しています。
Rafael Almeida

4

PowerShellを使用している方

PS C:\> Get-Content create.sql -Raw | sqlite3 auction.db

2

Windows CMDを使用している場合は、このコマンドを使用して、sqlite3を使用するデータベースを作成できます。

C:\sqlite3.exe DBNAME.db ".read DBSCRIPT.sql"

その名前のデータベースがない場合、sqlite3はそれを作成し、すでに持っている場合は、とにかくそれを実行しますが、「TABLENAME already exists」エラーが発生します。このコマンドを使用して、既存のものを変更することもできると思います。データベース(しかし、よくわかりません)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.