[python] par dotazu od zacatecnika v SQL

zu1234 zu1234 na seznam.cz
Středa Prosinec 27 12:33:06 CET 2017


Jsem stará konzerva a myslím si že začátečník by měl začínat jednoduše.
Vyhnul bych se SQLAlchemy a ORM.
Když jsem se snažil si zjednodušit život, většinou jsem si zavařil.


Dne 27.12.2017 v 9:26 Petr Blahos napsal(a):
> Ahoj, já si jenom dovolím doplnit, že když budeš dělat webovou 
> aplikaci v nějakém
> frameworku, tak tam bude nějak vyřešen životní cyklus transakce, např.
> v Pyramid+SQLAlchemy běžně tak, že v handleru máš k dispozici ORM session
> (což je něco, pomocí čeho se s ORM pracuje), a automatický commit nebo 
> roll-back.
>
> Dál, s SQLAlchemy nemusíš jet pomocí ORM, má také query language (QL), 
> kterým
> sestavíš a spustíš dotaz - nějakej overhead tam samozřejmě je, ale je 
> menší než
> u ORM. Já, když mám malé množství recordů, tak použiju ORM, když dělám
> nějakej přehled, tak použiju QL.
>
> Petr
> --
> http://petr.blahos.com/
>
>
>
>
> 2017-12-25 12:59 GMT+01:00 Petr Messner <petr.messner na gmail.com 
> <mailto:petr.messner na gmail.com>>:
>
>     Ahoj,
>
>     pymysql a mysqldb jsou db drivery - klientské knihovny pro přístup
>     do databáze, umožňují provádět SQL dotazy, transakce a tak.
>
>     ORM je knihovna, která uvnitř typicky používá ten db driver (v
>     SQLAlchemy je součástí connection stringu informace, který driver
>     se má použít) a umožňuje pracovat s databází "objektovým
>     způsobem". Konkrétně SQLAlchemy je "filosoficky" založená na
>     design patternech Data Mapper a Unit of Work, jiná ORM (myslím že
>     např. to Djangové) mohou preferovat design pattern Active Record.
>     To píšu proto, kdybys chtěl dál zkoumat, proč a jak to funguje a
>     jaké jsou alternativy a výhody/nevýhody jednotlivých přístupů.
>
>     ORM může a nemusí být vhodné pro menší a větší projekty.
>     Samozřejmě můžeš kombinovat ORM a SQL přístup. Některé dotazy je
>     jednodušší zapsat přímo přes SQL, jindy je zase joinů anebo
>     sloupců tolik, že ORM dost šetří práci. Nebo pokud chceš používat
>     stored procedures a další funkcionalitu SQL databáze, tak asi
>     budeš chtít přímo SQL.
>
>     Co se týče volby mezi mysqldb a pymysql, tak dnes bych asi volil
>     pymysql.
>
>     Víc SQL dotazů samozřejmě můžeš dělat přes jedno spojení i přes
>     jeden kurzor. Víc kurzorů potřebuješ, když chceš dělat SQL dotazy
>     zatímco teprve zpracováváš výsledky jiného SQL dotazu. V tvém
>     příkladu si ale ty výsledky nejdřív načteš všechny z kurzoru do
>     paměti, takže je OK znovu použít ten kurzor.
>
>     Celá tahle abstrakce s kurzory by měla být v Pythonu pro všechny
>     SQL databáze stejná, je to definované v PEP 249:
>     https://www.python.org/dev/peps/pep-0249/
>     <https://www.python.org/dev/peps/pep-0249/>
>
>         These objects represent a database cursor, which is used to
>         manage the context of a fetch operation. Cursors created from
>         the same connection are not isolated, i.e., any changes done
>         to the database by a cursor are immediately visible by the
>         other cursors.
>
>
>     Jinak bych tě ještě upozornil, ať se vyvaruješ *SQL injection*.
>     Správný přístup je použít v SQL zástupné symboly.a konkrétní data
>     dodat "bokem":
>
>     self.cursor.execute('INSERT INTO values VALUES ('', NOW(), %s)',
>     (row[0], ))
>
>     Kdyžtak tady je ukázka "jednoduché" webové aplikace používající
>     sqlite (napřímo), vzhledem k podobnosti všech driverů (díky PEP
>     249) by to skoro takhle vypadalo i s MySQL:
>     https://github.com/messa/db-workshop-web-app/blob/dokonceno/anketa.py
>     <https://github.com/messa/db-workshop-web-app/blob/dokonceno/anketa.py>
>
>     A tady je varianta s SQLAlchemy:
>     https://github.com/messa/db-workshop-web-app/blob/sqlalchemy/anketa.py
>     <https://github.com/messa/db-workshop-web-app/blob/sqlalchemy/anketa.py>
>
>     Další čtení: :)
>
>     - https://blog.sqreen.io/preventing-sql-injections-in-python/
>     <https://blog.sqreen.io/preventing-sql-injections-in-python/>
>     - https://www.fullstackpython.com/databases.html
>     <https://www.fullstackpython.com/databases.html>
>
>     PM
>
>     Dne 25. prosince 2017 11:41 Lubomir Vogl <python na vogl.cz
>     <mailto:python na vogl.cz>> napsal(a):
>
>         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 <mailto:python na py.cz>
>         http://www.py.cz/mailman/listinfo/python
>         <http://www.py.cz/mailman/listinfo/python>
>
>         Visit: http://www.py.cz
>
>
>
>     _______________________________________________
>     Python mailing list
>     python na py.cz <mailto:python na py.cz>
>     http://www.py.cz/mailman/listinfo/python
>     <http://www.py.cz/mailman/listinfo/python>
>
>     Visit: http://www.py.cz
>
>
>
>
> _______________________________________________
> 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/20171227/0280f79e/attachment.html>


Další informace o konferenci Python