Python - SQLite
SQLite je knihovna, která vám umožňuje ukládat data do souboru a pracovat s nimi pomocí SQL dotazů, jako třeba v Postgresu. Umí toho sice o poznání méně, ale velkou výhodou je, že pro její použítí nepotřebujete žádný běžící server.
V této kapitole budu předpokládat, že jste si alespoň pročetli kapitolu o PostgreSQL. Díky tomu může být tato kapitola extrémě krátká.
Spojení s databází
Stejně jako v PostgreSQL, i k SQLite potřebujete vytvořit nejdřívě nějaké
spojení. SQLite je aktuálně ve verzi 3, proto se modul pro práci SQLite
jmenuje sqlite3
. Jedná se o modul ze
standardní knihovny
Pythonu, takže by měl být k dispozici vždy.
Metodě connect()
tohoto modulu
obvykle předáte jméno souboru, ve kterém chcete mít (nebu už máte) data.
Speciální možností je zadat :memory:, která vytvoří
databázi v paměti. (Taková databáze se po skončení Pythonu samozřejmě smaže).
Druhým krokem je vytvoření kurzoru, který se bude používat pro zadávání SQL dotazů do databáze přes connection.
connToFile = sqlite3.connect('example.db')
conn = sqlite3.connect(':memory:')
curs = conn.cursor()
Zadávání příkazů
SQL dotazy předáváte metodě execute()
objektu cursor.
Hodnoty můžete předávat do SQL dotazu pomocí otazníků, nebo pomocí jmen označených dvojtečkou na začátku.
curs.execute("INSERT INTO tab1 VALUES (?,?)", ('Karel Gott','298765'))
curs.execute("INSERT INTO tab1 VALUES (:jmeno,:fon)", {'jmeno':'Karel Gott','fon':'298765'})
Ukončení transakce
Aby se změny v databázi uložili, musíte zavolat metodu commit()
objektu connection. Transakce se také ukončuje DML SQL příkazy
(například vytvořením tabulky)! (To platí, mimchodem, i pro jiné SQL databáze, jako PostgreSQLs nebo MySQL.)
Pokud chcete transakci zrušit, použijte metodu
rollback()
(conn.rollback()
). Tato metoda
zruší všechny změny provedené od začátku transakce (posledního použití metody
commit()
nebo DML příkazu).
Pokud chcete, aby se každý INSERT ihned zapsal do DB a nemuseli jste
zadávat conn.commit()
,
nastavte isolation_level
na None
.
conn = sqlite3.connect(":memory:")
conn.isolation_level = None
Práce s tabulkami
Práce s tabulkami je stejná, jako v PostgreSQL.
Používají se metody fetchall()
nebo fetchone()
objektu kurzor …
Práce s datovými typy
Pokud vytvoříte tabulku se sloupcem datového typu date
,
bude se vracet jako řetězec. Pokud chcete, aby sqlite automaticky převáděl
datové typy podle typu sloupečku, nastavte parametr detect_types
metody sqlite3.connect
na sqlite3.PARSE_DECLTYPES
.
(Budou se převádět všechny datové typy které sqlite umí, nejen data).
>>> conn = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES);
>>> curs = conn.cursor()
>>> curs.execute("CREATE TABLE tab2 (jmeno varchar(20), datum date)")
<sqlite3.Cursor object at 0xb732f7a0>
>>> curs.execute("INSERT INTO tab2 VALUES ('Muromec','2002-02-21')")
<sqlite3.Cursor object at 0xb732f7a0>
>>> curs.execute("SELECT * from tab2")
<sqlite3.Cursor object at 0xb732f7a0>
>>> radek = curs.fetchone()
>>> print(radek[0], radek[1])
(u'Muromec', datetime.date(2002, 2, 21))
>>> type(radek[1])
<class 'datetime.date'>
Ukončení práce s databází
Spojení k databázi byste měli vždy uzavřít. Nepoužívaný cursor také, ať neplýtváte prostředky.
conn.close()