Přejít k navigační liště

Zdroják » Databáze » web.py – databáze

web.py – databáze

Články Databáze, Různé

Dnes se nebudeme věnovat ničemu jinému než paměti aplikací – databázím. Povíme si o různých pojetích práce s databázemi, o potřebných knihovnách a nakonec si předvedeme jednotlivé funkce.

V minulých dílech už jsme se věnovali základu frameworku i šablonám, nic už nám tedy nebrání v tvorbě webových aplikací. Co nám ale nejspíš bude při vývoji scházet, je úložistě dat, tedy databáze.

Práce s databázemi

Web.py standardně obsahuje moduly pro práci s SQL databázemi v rámci klasického relačního modelu. Tomuto nejrozšířenějšímu způsobu práce s databázemi se budeme věnovat i my.

Pokud byste ale raději pracovali technikou ORM (objektově relační mapování), můžete využít například modul Pythonu SQLAlchemy. Návod na jeho zprovoznění najdete na stránkách projektu web.py http://webpy.org/cookbook/sqlalchemy.

Knihovny

Aby mohl web.py komunikovat s databázemi, potřebuje mezivrstvu zajišťující kontakt mezi databázovým serverem a Pythonem. Pro komunikaci s MySQL slouží například knihovna MySQLdb. Pro Postgres můžete využít balíček Psycopg. A do třetice, pro minimalistickou souborovou databázi SQLite existuje knihovna pysqlite.

Tyto balíčky je možné nainstalovat z uvedených odkazů. Pokud používáte Linux, můžete je najít v repozitářích (například konektor MySQL pod názvem python-mysqldb apod.).

Funkce

Nyní už si konečně popíšeme jednotlivé funkce knihovny database, připojení k databázi a zasílání SQL dotazů.

Připojení k databázi

Než začnete zasílat dotazy do databáze, je nutná krátká konfigurace připojení, web.py se pak postará o jeho návázání i zrušení.

db = web.database(dbn='typ', user='jmeno', pw='heslo', db='jmeno_databaze')

Typ databáze může být například mysql, postgres či sqlite3. Při použití SQLite není nutné zadávat uživatelské jméno ani heslo, pouze cestu k souboru databáze do proměnné db.

Pokud se databáze nachází na jiném počítači (není na adrese localhost), je třeba její adresu zapsat do proměnné host.

Poolování

Pokud počítáte s vysokým zatížením aplikace, můžete do aplikace přidat tzv. connection pooling, který „recykluje“ spojení s databází. Tato funkce je automaticky aktivována, pokud je dostupný modul Pythonu DBUtils.

Pokud máte tento modul nainstalován, ale nechcete jej u daného spojení používat, stačí při tvorbě spojení přidat argument pooling=False.

Select

Pro zaslání dotazu SELECT stačí zavolat funkci select a předat jí název tabulky. Funkce poté vrátí seznam řádků, k jejich sloupcům lze přistupovat jako ke slovníkovým hodnotám.

seznam = db.select("uzivatele")
for u in uzivatele:
    print u.jmeno

Další argumenty

Dále je možné při volání select přidávat i další SQL argumenty. Abych je nemusel vypisovat zvlášť, zde je příkaz využívající všechny z nich. Argumenty jsou v podstatě „rozkouskovanou“ obdobou SQL dotazů:

databaze = db.select("uzivatele",
                     what="jmeno, mesto", where="id < 100",
                     order="jmeno DESC", group="mesto",
                     limit="50", offset="15")

Prvním argumentem předáváme jméno tabulky, druhým (WHAT) určujeme žádané sloupce, třetím (WHERE) udáváme podmínku pro výběr, čtvrtým (ORDER) určujeme seřazení seznamu, pátým (GROUP) určujeme sdružování do skupin, šestým (LIMIT) určujeme, kolik záznamů se má načíst a sedmým (OFFSET), kde se má s načítáním začít.

Insert

Pomocí funkce insert lze do tabulky vkládat řádky s novými hodnotami. V příkazu stačí určit název tabulky a dále už jen páry nazev_sloupce=hodnota:

id_zaznamu = db.insert('uzivatele', jmeno="Josef", mesto="Letovice")

Funkce vrací id vloženého řádku.

Update

Příkaz update pro úpravu stávajících záznamů je velice podobný příkazu insert, pouze navíc přidáváme argument where, který určuje upravované záznamy.

db.update('uzivatele', where="id=10", jmeno="Karel")

Delete

Pro smazání záznamu pomocí funkce delete stačí předat název tabulky a pomocí argumentu where určit smazávané záznamy.

db.delete('uzivatele', where="id=10")

Query

Pokud vám žádný z vyčtených příkazů nedostačuje, je možné použít funkci query, která volá prosté SQL příkazy.

pocet_uzivatelu = db.query("SELECT COUNT(*) AS pocet_uzivatelu FROM uzivatele")

Proměnné v parametrech

Pokud chcete do argumentů funkcí vkládat proměnné, je třeba je nejdříve předat do argumentu vars v podobě slovníku. K těmto proměnným lze pak v parametru přistupovat pomocí konstrukce $promenna.

Díky tomuto způsobu vkládání proměnných je vstup escapován a SQL dotaz je tak chráněn proti SQL injection.

Vložení proměnné tedy může vypadat takto:

seznam = db.select('uzivatele', vars={'jmeno':"Pavel"}, where="jmeno=$jmeno")

Nebo takto:

slovnik = {'jmeno':"Pavel"}
results = db.select('uzivatele', vars=slovnik, where="jmeno=$jmeno")

Či takto:

slovnik = dict(jmeno="Pavel")
results = db.select('uzivatele', vars=slovnik, where="jmeno=$jmeno")

Testování

Chcete-li, aby aplikace vypisovala sestavený SQL dotaz, stačí do funkce přidat argument _test:

databaze = db.select("uzivatele", _test=True)
<sql: 'SELECT * FROM uzivatele'>

Závěr

To je pro dnešek vše. Příště se budeme věnovat slíbené autorizaci a autentizaci uživatelů.

Komentáře

Odebírat
Upozornit na
guest
1 Komentář
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
Zobrazit všechny komentáře
Segeda

Nemělo by být „Prvním argumentem předáváme jméno tabulky…“

Vite 8 Beta přináší nový bundler Rolldown a zásadní zrychlení buildů

Vite je moderní nástroj pro vývoj webových aplikací, který klade důraz na rychlost a jednoduchou konfiguraci. Umožňuje okamžitý start dev serveru a optimalizované produkční buildy, což urychluje vývoj i nasazení. Verze 8 Beta přináší zásadní změnu díky integraci bundleru Rolldown napsaného v Rustu, který sjednocuje vývojovou a produkční pipeline. Novinka výrazně zrychluje buildy a přináší moderní optimalizace. Součástí jsou také nové funkce pro TypeScript a připravovaný Full Bundle Mode pro rychlejší dev server.

Stack Overflow spouští AI Assist: nový nástroj pro moderní vývojáře

Stack Overflow představil AI Assist, nástroj, který propojuje generativní AI s rozsáhlou databází ověřených znalostí komunity. Platforma, která byla více než 18 let klíčovým zdrojem řešení pro vývojáře po celém světě, tím reaguje na změny ve způsobu práce s informacemi. Cílem AI Assist je zrychlit hledání odpovědí, zvýšit jejich spolehlivost a nabídnout kontext, který pomáhá lépe porozumět problému i řešení. Tento krok odráží trend, kdy se vývojáři čím dál více obracejí na nástroje, které dokážou kombinovat rychlost AI s ověřenými znalostmi komunity. AI Assist se tak stává mostem mezi tradičním Q&A formátem a moderními interaktivními asistenty.