Programování v Pythonu

Podobné dokumenty
Návrh a tvorba WWW stránek 1/14. PHP a databáze

Programování v Pythonu

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Jazyk SQL databáze SQLite. připravil ing. petr polách

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Programování v Pythonu

Databázové systémy Cvičení 5.2

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Programování v Pythonu

PHP a Large Objecty v PostgreSQL

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Programování v Pythonu

Programování v Pythonu

Semináˇr Java X JDBC Semináˇr Java X p.1/25

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Programování v Pythonu

Databáze I. Přednáška 4

Sada 1 - PHP. 14. Úvod do jazyka SQL

Oracle XML DB. Tomáš Nykodým

Použití databází na Webu

Databázové systémy. Cvičení 6: SQL

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Text úlohy. Systémový katalog (DICTIONARY):

Databázové systémy I

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

Verzování a publikace dat na webu za pomoci PostgreSQL

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

5. POČÍTAČOVÉ CVIČENÍ

Embedded SQL v C/C++ úvod. Administrace Oracle Kateřina Opočenská

Administrace Oracle. Práva a role, audit

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Programování v Pythonu

Zápisování dat do databáze

MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze');

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

PG 9.5 novinky ve vývoji aplikací

Databázové systémy a SQL

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

Úvod do databázových systémů

SQL - trigger, Databázové modelování

Střední odborná škola a Střední odborné učiliště, Hořovice

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

DUM 12 téma: Příkazy pro tvorbu databáze

Programování v Pythonu

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

8.2 Používání a tvorba databází

Informační systémy 2008/2009. Radim Farana. Obsah. Skripty a dávky. Nastavení aktuální databáze. USE DatabaseName

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Databázové systémy úvod

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Embedded SQL v C/C++ III - pole, struktury. Jindřich Vodrážka

Databáze I. Přednáška 7

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

Databáze 2011/2012 T-SQL - kurzory, funkce. RNDr.David Hoksza, Ph.D.

Programování v Pythonu

Databáze II. 1. přednáška. Helena Palovská

DATABÁZOVÉ A INFORMAČNÍ SYSTÉMY

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

KIV/ZIS cvičení 6. Tomáš Potužák

O Apache Derby detailněji. Hynek Mlnařík

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

6. SQL složitější dotazy, QBE

Úvod do databázových systémů

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Programování v Pythonu

Datablades včera, dnes a zítra

Programování v Pythonu

Virtuální privátní databáze

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307

Úvod do databázových systémů

Základní přehled SQL příkazů

Dotazovací jazyk SQL I

Audit DB. Referát. Vypracoval: Zdeněk Doležal MFF UK Praha 11/5/06

Kapitola 4: SQL. Základní struktura

Informační systémy ve zdravotnictví. 8. cvičení

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

Ukládání a vyhledávání XML dat

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Jazyk SQL 3 - DML, DDL, TCL, DCL

Programování v Pythonu

6. blok část B Vnořené dotazy

8 Třídy, objekty, metody, předávání argumentů metod

Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo

Transkript:

ƒeské vysoké u ení tecnické v Praze FIT Programování v Pytonu Ji í Znamená ek P íprava studijnío programu Informatika je podporována projektem nancovaným z Evropskéo sociálnío fondu a rozpo tu lavnío m sta Pray. Praa & EU: Investujeme do va²í budoucnosti

Pyton AXML (2010-11-11 : SQLite v Pyton'u 1 of 7 Pyton AXML SQLite v Pyton'u SQLite v Pyton'u Pyton od verze 2.5 obsauje nativně SQLite. Přístup k ní zajišťuje modul sqlite3, pomocí kteréo se k vybrané databázi připojíme, vykonáme svoji práci a na konci po sobě zase pěkně uklidíme. Veškeré operace s databází přitom zajišťuje speciální objekt cursor, který bycom po skončení práce měli také uzavřít. Typická seance s databází v Pyton'u vypadá tedy takto: # encoding: utf-8 import sqlite3 # připojení k SQLite-databázi # ~ pokud soubor neexistuje, bude v daném umístění vytvořen connection = sqlite3.connect("structures.db" # získání kurzoru cursor = connection.cursor( # práce s databází... # uzavření kurzoru cursor.close( # uzavření připojení k databázi connection.close( Kurzorů do databáze můžeme otevřít více najednou a pracovat s každým zvlášť nezávisle na ostatníc. Důležité: SQLite, narozdíl např. od MySQL, přijaté příkazy na změnu dat v databázi (tj. např. INSERT, ALTER, UPDATE... automaticky neprovádí ined! Cceme-li je tedy do databáze skutečně zaznamenat, musíme si to vyžádat vyvoláním metody connection.commit( na otevřené konexi. Příklad vyledávání V následujícím příkladu si ukážeme jednoducý dotaz nad databází structures.db vyledání všec záznamů, jež ve jménu obsaují podřetězec benzene, aneb v SQL:

Pyton AXML (2010-11-11 : SQLite v Pyton'u 2 of 7 SELECT id, name FROM structures WHERE name LIKE '%benzene%'; Odpovídající program v Pyton'u je následující: Program structures.sqlite/structures.find.py Výstup: : # encoding: utf-8 import sqlite3 # připojení k SQLite-databázi # ~ pokud soubor neexistuje, bud connection = sqlite3.connect("st # získání kurzoru ( pracovnío o cursor = connection.cursor( benzene-1,2,3,5-tetrol 1,2,4-triclorobenzene benzene 3-penylbenzene-1,2-diol benzene-1,2-diol 2-clorobenzene-1,4-diol 3-metylbenzene-1,2-diol benzene-1,3,5-triol benzene-1,4-diol # dotaz do databáze cursor.execute(""" SELECT id, name FROM structu WHERE name LIKE '%benzen # kurzor se cová jako iterátor for id, name in cursor: print "%-30s %s" % ( name, "t # uzavření kurzoru cursor.close( # uzavření připojení k databázi connection.close( Odmyslíme-li si povinnou omáčku připojovacíc a uzavíracíc příkazů (viz předcozí slajd, redukuje se práce s databází v Pyton'u na volání metody cursor.execute('sql-dotaz' právě používanéo kurzoru. Jejím parametrem je (jeden konkrétní SQL-dotaz, kterým je naprosto standardní SQL příslušné databáze (zde tedy SQLite. Vytvoření databáze Uvedená databáze structures.db byla vytvořena z textovéo souboru s daty structures.txt pomocí následujícío skriptu:

Pyton AXML (2010-11-11 : SQLite v Pyton'u 3 of 7 # encoding: utf-8 import sqlite3 # připojení k SQLite-databázi # ~ pokud soubor neexistuje, bude v daném umístění vytvořen connection = sqlite3.connect("structures.db" # získání kurzoru cursor = connection.cursor( # odstranění případné již existující tabulky danéo jména cursor.execute(""" DROP TABLE IF EXISTS structures; # vytvoření tabulky cursor.execute(""" CREATE TABLE structures ( id INTEGER PRIMARY KEY, name TEXT, incikey TEXT, smiles TEXT; # nucené vyvolání čekajícíc operací # (to abycom nezačali s databází pracovat a ona ještě neexistoval connection.commit( # naplnění databáze/tabulky údaji ze souboru f = file("structures.txt" for line in f: id, incikey, smiles, name = line.strip(.split("\t" cursor.execute( "INSERT INTO structures (id,name,incikey,smiles VALUES (?,?, # commit není třeba provádět po každém execute # (prostě se INSERTů zavolá a vykoná více najednou connection.commit( # uzavření kurzoru cursor.close( # uzavření připojení k databázi connection.close( Převedeno přímo do příslušnéo SQL jde tedy o následující sekvenci příkazů (zbývajícíc 197 INSERTů vynecáno :-:

Pyton AXML (2010-11-11 : SQLite v Pyton'u 4 of 7 DROP TABLE IF EXISTS structures; CREATE TABLE structures ( id INTEGER PRIMARY KEY, name TEXT, incikey TEXT, smiles TEXT ; INSERT INTO structures (id,name,incikey,smiles VALUES (7,"MUIPLR INSERT INTO structures (id,name,incikey,smiles VALUES (11,"WSLDO INSERT INTO structures (id,name,incikey,smiles VALUES (12,"RDJUH... Za pozornost stojí zvláště použití znaku? pro vložení parametrů podle jejic pozice za první otazníček se dosadí id, za druý name atd. Parametry Parametry SQL-dotazu můžeme předávat pozičně jako v předcozím příkladu... cursor.execute( "INSERT INTO structures (id,name,incikey,smiles VALUES (?,?,?,...ale též pojmenovaně (což se odí zvláště pro složitější příkazy: cursor.execute( "INSERT INTO structures (id,name,incikey,smiles VALUES (:id,:n {"id": id, "name": name, "incikey": incikey, "smiles": smiles} V předcozím příkladu jsme uvnitř smyčky neustále kolem dokola volali příkaz INSERT INTO pokaždé s jinými parametry. Pokud bycom parametry měli dopředu k dispozici ve formě datové struktury (nazvěme ji data, po které se dá iterovat, moli bycom místo smyčky použít jednodušší příkaz: cursor.executemany( "INSERT INTO structures (id,name,incikey,smiles VALUES (?,?,?, data Více SQL-příkazů

Pyton AXML (2010-11-11 : SQLite v Pyton'u 5 of 7 Metoda Cursor.execute( přebírá právě jeden SQL-dotaz: cursor.execute( "...SQL-1..." Pro vykonání více SQL-příkazů najednou slouží metoda Cursor.executescript(: cursor.executescript("""...sql-1......sql-2...... Vytvoření ukázkové databáze struktur tedy může vypadat také takto: cursor.executescript(""" DROP TABLE IF EXISTS structures; CREATE TABLE structures ( id INTEGER PRIMARY KEY, name TEXT, incikey TEXT, smiles TEXT; Získávání výsledků Už jsme viděli, že výsledek SQL-dotazu do databáze se vrátí jako iterátor (tedy struktura, po které se dá iterovat: # dotaz do databáze cursor.execute(""" SELECT id, name FROM structures WHERE name LIKE '%benzene%'; # kurzor se cová jako iterátor přes množinu výsledků dotazu for name in cursor: print name Někdy se nám však moou odit další varianty získání výsledů: cursor.fetcone( vrátí následující řádek z návratové množiny dotazu (nebo None, pokud už tam další není cursor.fetcmany([size] vrací pouze zadaný (či menší, nejsou-li již k dispozici počet řádek

Pyton AXML (2010-11-11 : SQLite v Pyton'u 6 of 7 cursor.fetcall( vrátí všecny zbývající řádky (od aktuální pozice z návratové množiny dotazu jako seznam (nejsou-li žádné řádky k dispozici, vrácený seznam bude prázdný Mapování typů Pyton (< 3.0 Pyton (>= 3.0 SQLite None None NULL int int INTEGER long INTEGER float float REAL str (UTF-8 str TEXT unicode TEXT buffer bytes BLOB SQLite má typy nejen velmi jednoducé, ale navíc i dynamické (typ je vázán na konkrétní údaj, nikoli na místo uložení v databázi, tj. sloupeček. To je ale mezi databázemi výjimka (stejně jako u programovacíc jazyků se dynamické typy špatně optimalizují a blbě ladí a rozodně si na to nezvykejte. Jednoducosti boužel padl za oběť třeba i typ Boolean, který je při standardní konverzi ukládán jako 0/1. (Naše ukázková databáze world převedená z MySQL používá jako pozůstatek konverze F/T. Na druou stranu pokud o to budete odně stát, můžete SQLite v Pyton'u naučit používat (tedy konvertovat na jednoducé typy i další pytonovské typy než pouze výše uvedené základní. Zkratky Pokud potřebujete rycle získat data z databáze či provést nějakou jednoducou úpravu, nabízí pytonovské rozraní k SQLite-databázi (DB

Pyton AXML (2010-11-11 : SQLite v Pyton'u 7 of 7 API 2 několik užitečnýc zkratek všecny tři varianty metody execute lze totiž volat přímo na otevřeném připojení do databáze: import sqlite3 connection = sqlite3.connect("structures.db" connection.execute("...sql..." connection.executemany("...sql...", params connection.executescript("...sql..." Není-li tudíž potřeba použití kurzorů z jinéo důvodu, můžete se jim úplně vynout uvedené zkratky si pro vykonání zadanéo SQL-příkazu(ů vyrobí dočasný kurzor samy.