Exécuter le script SQLite

99

Je lance sqlite3 version 3.7.7, unix 11.4.2 en utilisant cette commande:

sqlite3 auction.db

où Auction.db n'a pas déjà été créé.

sqlite> auction.db < create.sql;

me donne cette erreur: near "auction": syntax error

Comment puis-je exécuter le script?

Rose Perrone
la source

Réponses:

127

Il existe de nombreuses façons de procéder, l'une d'entre elles est:

sqlite3 auction.db

Suivi par:

sqlite> .read create.sql

En général, le projet SQLite a une documentation vraiment fantastique! Je sais que nous recherchons souvent Google avant la documentation, mais dans le cas de SQLite, la documentation est vraiment une rédaction technique à son meilleur. C'est propre, clair et concis.

bitops
la source
4
Pour une utilisation dans scritps, vous pouvez exécuter la .readcommande directement à partir de la sqlite3commande: sqlite3 autction.db '.read create.sql'.
Cris Luengo
145

Vous voulez nourrir create.sqldans sqlite3de la coquille, et non à l' intérieur SQLite lui - même:

$ sqlite3 auction.db < create.sql

La version SQLite de SQL ne comprend pas les <fichiers, votre shell le comprend.

mu est trop court
la source
1
Malheureusement, tous les shells ne sont pas considérés <comme une redirection d'entrée. (Par exemple, PowerShell.)
Alan
@Alan PowerShell a un mécanisme de redirection d'entrée, non? Et sinon, il y a toujours l' approche de Bitops .
mu est trop court le
@muistooshort voir mon commentaire sur bitops. Les commandes sqlite dot fonctionnent dans le paramètre d'instruction sql afin que vous puissiez lire le fichier de votre choix sans recourir à la redirection d'entrée.
Chris Becke
@ChrisBecke ce sont des solutions différentes. <quittera immédiatement l'invite SQLite et renverra le code d'erreur au shell. .read file.sqlquittera l'invite et -init file.sqlretournera toujours 0, c'est donc <le meilleur pour les scripts. En outre, il est multi-plateforme contrairement à .readce qui ne prend pas en charge les chemins Windows.
TWiStErRob
23

Afin d'exécuter des requêtes simples et de revenir à mon script shell, je pense que cela fonctionne bien:

$ sqlite3 example.db 'SELECT * FROM some_table;'
remeika
la source
2
C'est effectivement une réponse trop courte .
Colonel Thirty Two
11
@ColonelThirtyTwo Oui, c'est très proche de la réponse de mu est trop courte . La raison pour laquelle j'ai ajouté une réponse supplémentaire était de démontrer une méthode pour exécuter rapidement une commande en ligne, plutôt que de prendre l'étape supplémentaire de création d'un fichier SQL pour stocker la commande.
remeika
5
@remeika Je pense que la façon la plus idiomatique d'exécuter une commande en ligne serait sqlite3 example.db 'SELECT * FROM some_table;', plutôt que d'
envoyer
1
En outre, (après la modification), cela démontre que sqlite3lit les commandes à exécuter non seulement à stdinpartir du dernier argument, mais également à partir du dernier argument.
Rafael Almeida
4

Pour ceux qui utilisent PowerShell

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

Si vous utilisez Windows CMD, vous pouvez utiliser cette commande pour créer une base de données à l'aide de sqlite3

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

Si vous n'avez pas de base de données avec ce nom, sqlite3 en créera une, et si vous en avez déjà une, elle l'exécutera quand même mais avec l'erreur "TABLENAME déjà existe", je pense que vous pouvez également utiliser cette commande pour modifier un déjà existant base de données (mais je ne suis pas sûr)

David Brun
la source