6

20 時間以上の Python コーディング経験があり、コマンドラインに慣れていない初心者プログラマーとして、Zed Shaw の「Learn SQL The Hard Way」を開いたところ、すぐに困惑しました。

演習 01で、Zedは次の最初のコマンドで最初のテーブルを作成します。

sqlite3 ex1.db < ex1.sql

ただし、これはコマンドラインで実行できず、「-bash: ex1.sql: No such file or directory.」というエラー メッセージが表示されます。最初は、この推奨コードを無視して次の手順に進みました。

sqlite3 ex1.db
SQLite version 3.7.15.1 2012-12-19 20:39:10
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE person (
   ...>     id INTEGER PRIMARY KEY,
   ...>     first_name TEXT,
   ...>     last_name TEXT,
   ...>     age INTEGER
   ...> );

コマンドラインで「ls -l」を実行すると、次のように表示されます。

-rw-r--r--  1 thefifth  staff  2048 Feb 15 15:23 ex1.db

しかし、私が望んでいて得られないのは次のとおりです。

$ ls -l
-rw-r--r--  1 zedshaw  staff  2048 Nov  8 16:18 ex1.db
-rw-r--r--  1 zedshaw  staff    92 Nov  8 16:14 ex1.sql

私はグーグルで検索し、同じ「name.db < name.sql」構文を実装するこのブログを見つけましたが、ここのコードをたどってもうまくいきませんでした。このスタック オーバーフローにも同様の構文がありますが、.sql を sqlite3 に変換するコンテキストで使用されます。

具体的には、これがネイティブの bash ターミナルで使用する "<" であるかどうか、およびその正しい使用に関する特定の基準を満たしていないかどうか疑問に思っています。また、.sql ファイルと .db ファイルの両方を作成する目的がわかりませんが、一方は他方よりもはるかに小さいようです。sqlite3 を間違ってインストールしたのかもしれませんが、問題なく動作しているようです。

ご協力いただきありがとうございます!

4

3 に答える 3

10
sqlite3 ex1.db < ex1.sql

上記が機能するにex1.sqlは、すでに存在している必要があります。<入力リダイレクトのためにシェルで使用される文字です。sqlite3ここで、新規または既存のデータベースを使用して開始し (必要に応じてデータベースを作成します)、 から SQL ステートメントを取得してex1.sql実行し、ex1.dbそれに応じて変更します。

ex1.sqlから生成しましょうex1.db。これは明らかにやりたいことです。

sqlite3 ex1.db .dump > ex1.sql

シェルのリダイレクト機能を再度使用して、出力を にリダイレクトしますex1.sql。この.dumpコマンドはsqlite、空のデータベースで実行されたときに同様のデータベースを再作成する SQL ステートメントを書き出します。テーブルが再作成されINSERT、.

これで、ステップ 1 に進むことができます。

sqlite3 ex1copy.db < ex1.sql
于 2013-02-15T21:04:52.837 に答える
5
  1. コードを拡張子 .sql のファイルに保存します。
  2. 次にターミナルで: sqlite3 ex1.db < ex1.sql for create a ex1.db
  3. ターミナルに入れます: sqlite3 ex1.db .schema
  4. または置く: sqlite3 ex1.db [...そして....] .schema
于 2013-02-28T06:45:55.290 に答える
2

私は今日同じ問題に遭遇しました.あなたと同じように、なぜ私のコマンドが機能しないのか疑問に思っていました. 前述のように、著者は、テキスト エディタで初期コマンドを作成し、.sql ファイルとして保存することを前提としています。次に、ex1.db < ex1.sql コマンドでファイルを .db ファイルに変換します。

于 2014-04-03T14:58:39.783 に答える