Benutzer-Werkzeuge

Webseiten-Werkzeuge


sqlite

SQLite

Einrichtung

Test-Datenbank mit einer Test-Tabelle anlegen

#!/usr/bin/env bash
sqlite3 test.db "create table test (id int primary key, name text)"
sqlite3 test.db "insert into test values (1, \"Fritz\")"
sqlite3 test.db "select * from test"

hier ist wichtig, dass alles klein geschrieben wird und das am Ende der Zeile kein Semikolon steht, wie es bei SQL üblicherweise sein soll:

> echo ".databases" | sqlite3 test.db
> echo ".tables" | sqlite3 test.db

Abfragebeispiel über zwei Tabellen:

echo "
SELECT
      Spalte1,
      strftime('%w',datum),
      Spalte3
FROM
      ${TABELLE1},
      ${TABELLE2}
WHERE
      netz1=netz2
      AND id1=id2
      AND DATUM
              BETWEEN date('now','start of month','-1 month','-0 day')
              AND date('now','start of month','+0 month','-1 day')
GROUP BY 1, 2
ORDER BY 1, 2 DESC, 1
LIMIT 10
;
" | ${DBPROG} ${DBDATEI} > ${DATEN}

Das Semikolon am Ende eines SQL-Aufrufes ist sehr wichtig!

eine Pipe-separierte Datei mit höchstgeschwindigkeit einlesen

echo "
.import ${DATEN} ${TABELLE1}
.separator |
PRAGMA synchronous = 0;
" | ${DBPROG} ${DBDATEI}

Syntax

# echo "SELECT * FROM sqlite_master;" | sqlite /var/lib/csync2/rechnername.db
table|file|file|4|CREATE TABLE file ( filename, checktxt,     UNIQUE ( filename ) ON CONFLICT REPLACE)
index|(file autoindex 1)|file|3|
table|dirty|dirty|6|CREATE TABLE dirty (      filename, force, myname, peername,      UNIQUE ( filename, peername ) ON CONFLICT IGNORE)
index|(dirty autoindex 1)|dirty|5|
table|hint|hint|8|CREATE TABLE hint ( filename, recursive,    UNIQUE ( filename, recursive ) ON CONFLICT IGNORE)
index|(hint autoindex 1)|hint|7|
table|action|action|10|CREATE TABLE action (  filename, command, logfile,     UNIQUE ( filename, command ) ON CONFLICT IGNORE)
index|(action autoindex 1)|action|9|
table|x509_cert|x509_cert|12|CREATE TABLE x509_cert ( peername, certdata,     UNIQUE ( peername ) ON CONFLICT IGNORE)
index|(x509_cert autoindex 1)|x509_cert|11|

alle Datenbanken anzeigen:

# echo ".databases" | sqlite /var/lib/csync2/rechnername.db
seq  name             file
---  ---------------  ----------------------------------------------------------
0    main             /var/lib/csync2/rechnername.db
1    temp             /var/tmp/sqlite_gQiSCgZmz70zacs

alle Tabellen anzeigen:

# echo ".tables" | sqlite /var/lib/csync2/rechnername.db
action     dirty      file       hint       x509_cert

Tabellen mit dem Zeichen "i" im Namen anzeigen:

# echo ".tables i" | sqlite /var/lib/csync2/rechnername.db
action  dirty   file    hint

Ausgabeformate

spaltenweise:

# echo -e ".mode column\nSELECT * FROM dirty;" | sqlite /var/lib/csync2/rechnername.db
/etc/ha.d/resource.d/csync2  1           store01     store02   
/etc/hosts                   1           store01     store02   
/etc/vblade.conf             0           store01     store02   

Die normale Spaltenbreite sind 10 Zeichen, Inhalte die länger sind, werden abgeschnitten. Man kann die Spaltenbreite aber auch verändern, in diesem Beispiel wird die Breite der ersten Spalte auf "30" Zeichen und die der zweiten Spalte auf "3" Zeichen gesetzt. Alle weiteren Spalten bleiben unverändert:

# echo -e ".mode column\n.width 30 3\nSELECT * FROM dirty;" | sqlite /var/lib/csync2/
/etc/ha.d/resource.d/csync2     1    store01     store02   
/etc/hosts                      1    store01     store02   
/etc/vblade.conf                0    store01     store02   

als Liste:

# echo -e ".mode list\nSELECT * FROM dirty;" | sqlite /var/lib/csync2/rechnername.db
/etc/ha.d/resource.d/csync2|1|store01|store02
/etc/hosts|1|store01|store02
/etc/vblade.conf|0|store01|store02

zeilenweise

# echo -e ".mode line\nSELECT * FROM dirty;" | sqlite /var/lib/csync2/rechnername.db
filename = /etc/ha.d/resource.d/csync2
   force = 1
  myname = store01
peername = store02

filename = /etc/hosts
   force = 1
  myname = store01
peername = store02

filename = /etc/vblade.conf
   force = 0
  myname = store01
peername = store02

spezielles Trennzeichen:

# echo -e ".separator ', '\nSELECT * FROM dirty;" | sqlite /var/lib/csync2/rechnername.db
/etc/ha.d/resource.d/csync2, 1, store01, store02
/etc/hosts, 1, store01, store02
/etc/vblade.conf, 0, store01, store02
/home/http/wiki/data/pages/sqlite.txt · Zuletzt geändert: von manfred