[python] par dotazu od zacatecnika v SQL

Jan Bednařík jan.bednarik na gmail.com
Čtvrtek Prosinec 28 17:56:50 CET 2017


Ahoj,

Začínat s jazkem SQL je předčasná optimalizace. Začni s ORM. Doporučil bych
SQLAlchemy ORM nebo Django (pokud chceš dělat webové aplikace). Na drtivou
většinu věcí ti to bude stačit. Jazyk SQL je pro běžné potřeby zbytečně
nízkoúrovňový. Psát, testovat a udržovat kód se syrovým SQL je velká ztráta
času.

Záleží na projektu, ale když už náhodou budeš potřebovat něco, s čím si
tyhle ORM efektivně neporadí, tak to bude vyjímečná situace. V takových
situacích si většinou poradíš tím, že budeš trochu študovat manuály a
googlit, a zjistíš, že to často taky jde efektivně i s ORM. A když ne, tak
data vytaháš a zpracuješ je v Pythonním kódu. A když dat bude moc, a tohle
efektivně taky nepůjde, tak se naučíš pracovat s SQLAlchemy Core nebo
nastuduješ trochu toho syrového SQL.

Co se týče databáze, MySQL/MariaDB bych se vyhnul obloukem. Není ACID
(ačkoliv se tím pyšní), autocommituje změny schématu i během transakcí (cca
10 let stále neopravený a zřejmě neopravitelný bug). Při běžném použití tě
to nepotrápí. Ale jakmile se projekt rozjede a začneš dělat migrace
schematu a dat, tak tě to dřív nebo později pěkně vyjebe. Stalo se mi to v
životě asi třikrát, z toho dvakrát na nových projektech, kdy jsme MySQL
dali "ještě jednu šanci" protože PostgreSQL nebyla z nějakého důvodu
jednoduše k dispozici. S ORM můžeš opustit MySQL/MariaDB relativně snadno,
ale proč s ní vůbec začínat, když je tam (krom jiných neduhů) taková past?!

Doporučil bych PostgreSQL. S tou se nedá šlápnout vedle pro jakýkoliv
projekt. Má i zajímavé "NoSQL" fičury, jako datové typy JSON a hstore,
které stojí za pozornost.

SQLite může být taky dobrá volba, ale záleží na projektu. Její super fičura
je snadno použitelná databáze v RAMce, což se hodí hlavně pro testy.

Honza


2017-12-25 11:41 GMT+01:00 Lubomir Vogl <python na vogl.cz>:

> Ahoj,
>
> potreboval bych poradit s SQL. Hraju si s MariaDB a zajimalo by me :
>
> - jaka je nejlepsi knihovna pro praci s SQL ? Zatim jsem nasel (PyMySQL,
> SQLAlchemy, MySqlDb) Chtel bych se naucit neco co bude mozne pouzit i na
> slozitejsi projekty
> - je ORM vhodne i na jednodussi projekty ?
> - pokud budu v SQL chtit pouzivat vice SQL dotazu, je to mozne udelat pres
> jedno spojeni (jeden cursor) nebo je nutne mit vice otevrenych spojeni ?
> Viz nasledujici priklad - jedno otevrene spojeni
>
>
>  sql = "SELECT * FROM portal WHERE typ_id = " + str(typ)
>  self.cursor.execute(sql)
>  data = self.cursor.fetchall()
>  c = self.cursor.rowcount
>  for row in data:
>      sql1 = "INSERT INTO values VALUES ('',NOW(),0," + str(row[0]) + ")"
>      try:
>          self.cursor.execute(sql1)
>      except:
>          self.db.rollback()
> _______________________________________________
> Python mailing list
> python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20171228/c872454e/attachment.html>


Další informace o konferenci Python