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.

import sqlite3
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("CREATE TABLE tab1 (jmeno varchar(20), telefon varchar(20))")
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.)

conn.commit();

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.

import sqlite3

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).

>>> import sqlite3
>>> 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.

curs.close()
conn.close()
Komentář Hlášení chyby
Vytvořeno: 11.9.2005
Naposledy upraveno: 2.9.2015
Tato stánka používá ke svému běhu cookies, díky kterým je možné monitorovat, co tu provádíte (ne že bych to bez cookies nezvládl). Také vás tu bude špehovat google analytics. Jestli si myslíte, že je to problém, vypněte si cookies ve vašem prohlížeči, nebo odejděte a už se nevracejte :-). Prohlížením tohoto webu souhlasíte s používáním cookies. Dozvědět se více..