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/ 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 A tady je varianta s SQLAlchemy: https://github.com/messa/db-workshop-web-app/blob/sqlalchemy/anketa.py Další čtení: :) - https://blog.sqreen.io/preventing-sql-injections-in-python/ - https://www.fullstackpython.com/databases.html PM Dne 25. prosince 2017 11:41 Lubomir Vogl <pyt...@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@py.cz > http://www.py.cz/mailman/listinfo/python > > Visit: http://www.py.cz >
_______________________________________________ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz