As a beginning programmer with +20 hours of Python coding and novice familiarity with the command-line, I opened up Zed Shaw's "Learn SQL The Hard Way" and was quickly stumped.
In exercise 01, Zed has you create your first table with this first command:
sqlite3 ex1.db < ex1.sql
However this fails to run in my command-line, giving the error message, "-bash: ex1.sql: No such file or directory." Initially, I ignored this recommended code and proceeded with:
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
...> );
Running "ls -l" in the command-line shows:
-rw-r--r-- 1 thefifth staff 2048 Feb 15 15:23 ex1.db
But what I want and am failing to get is:
$ 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
I Googled around and found this blog that implements the same "name.db < name.sql" syntax, but following along the code here didn't work for me either. This Stack Overflow also has a similar syntax, but in the context of converting .sql to sqlite3.
Specifically, I'm wondering if this is the "<" for use in the native bash terminal, and that I'm failing to meet certain criteria for its correct use. Also, I don't know the purpose of creating both a .sql and .db file, although apparently one is much smaller than the other. Perhaps I've installed sqlite3 incorrectly, but it seems to be working fine.
Thanks for your help!
I ran into same problem today, and like you I was wondering why my command is not working. As mentioned above author assumes that you create the initial command in a text editor and save as a .sql file. And then ex1.db < ex1.sql command converts the file to a .db file.
For the above to work,
ex1.sql
should already exist.<
is a character used in shells for input redirection.sqlite3
is started here with a new or existing database (it will create the database as needed), and gets SQL statements fromex1.sql
, executing them and modifyingex1.db
accordingly.Now let's generate
ex1.sql
fromex1.db
, which you apparently want to do:We use shell redirection facility again, now redirecting the output to
ex1.sql
. The.dump
command makessqlite
write out SQL statements that will recreate similar database when they are executed in an empty database: tables are recreated and populated withINSERT
, etc.Now you can go to step 1: