Re: [python] MySQL - nativní rozhraní pro Python
Tak jsem ten _mysql wrapper důkladně zkoumal a on je tvrdě a jednorázově šitý na DB API. Není to zdaleka úplné API a v podstatě tam není prakticky nic moc navíc, co nejde přes DB API. Zkoumal jsem to včera a dnes, a není to bohužel použitelné, tedy je to použitelné - ale ne na rozšíření možností oproti DB API u MySQL databáze. Každopádně moc děkuji za tip. Miloslav Ponkrác Věroslav Kaplan napsal(a): 2008/6/28 superman [EMAIL PROTECTED]: Dobrý den, když pracuji s MySQL v Pythonu, tak obvykle přes standardní DB API Pythonu. Bohužel MySQL je v leččems trochu nestandardní a řadu věcí je lépe dělat přes nativní API. Existuje pro Python nějaký wrapper pro nativní API, nebo jiná knihovna? Možná jsem špatně hledal, nevím... _mysql je wrapper okolo C API, oproti tomu MySQLdb je wrapper na _mysql, abi odpovídalo DB API. Na mém stroji to vypadá, že obsahují různé symboly. Kvalitu modulu _mysql neposoudím, protože do C API MySQL nevidím, ale třeba to k něčemu bude. --VK [EMAIL PROTECTED]:~$ python import _mysql dir(_mysql) ['DataError', 'DatabaseError', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'MySQLError', 'NULL', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'Warning', '__doc__', '__file__', '__name__', '__version__', 'connect', 'connection', 'debug', 'escape', 'escape_dict', 'escape_sequence', 'escape_string', 'get_client_info', 'result', 'server_end', 'server_init', 'string_literal', 'thread_safe', 'version_info'] import MySQLdb dir(MySQLdb) ['BINARY', 'Binary', 'Connect', 'Connection', 'DATE', 'DATETIME', 'DBAPISet', 'DataError', 'DatabaseError', 'Date', 'DateFromTicks', 'Error', 'FIELD_TYPE', 'ImmutableSet', 'IntegrityError', 'InterfaceError', 'InternalError', 'MySQLError', 'NULL', 'NUMBER', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'ROWID', 'STRING', 'TIME', 'TIMESTAMP', 'Time', 'TimeFromTicks', 'Timestamp', 'TimestampFromTicks', 'Warning', '__all__', '__author__', '__builtins__', '__doc__', '__file__', '__name__', '__path__', '__revision__', '__version__', '_mysql', 'apilevel', 'connect', 'connection', 'constants', 'debug', 'escape', 'escape_dict', 'escape_sequence', 'escape_string', 'get_client_info', 'paramstyle', 'release', 'result', 'server_end', 'server_init', 'string_literal', 'thread_safe', 'threadsafety', 'times', 'version_info'] ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Ked ste sa uz o tomto tak rozpisali, tak prihodim jednu otazku aj ja. Dost by ma zaujimalo ako sa s tymto daju robit zlozitejsie SQL dotazy, napr. nejake JOINy a podobne. Moc si to neviem predstavit. -Pôvodná správa- Od: Jan Bednařk [mailto:[EMAIL PROTECTED] Komu: Konference PyCZ python@py.cz Predmet: Re: [python] MySQL - nativní rozhraní pro Python 2008/6/29 zu1234 [EMAIL PROTECTED]: Doufám že to někdo nevezme jako provokaci, ale opravdu by mi občas bodlo dostat se prostě do obrazu. Takže, byl by někdo ochotný obeznámit nás začátečníky s pojmy jako je SQLAlchemy a Django. Ale prosím opět polopatě a prakticky a lidsky. ZU SQLAlchemy je aplikace, která ti umožní pracovat s tabulkami a záznamy v databázi jako s běžnými objekty. Je určena pro integraci do jiných aplikací, jako databázová vrstva. Nemusíš tak být odborník na SQL, aby jsi mohl jednoduše a pohodlně pracovat s databází, teoreticky ani nemusíš vědět, jak databáze fungují a co to SQL je. Koukni na http://www.sqlalchemy.org/docs/05/ormtutorial.html a pochopíš, oč jde. Django je RAD (Rapid Application Development) framework pro tvorbu internetových aplikací. Funguje na principu MTV = Model Template View. V první úrovni - Model - nadefinuješ modely. To jsou třídy reprezentující tabulky v databázi a jejich závislosti a pak s nimi pracuješ jako s objekty. Je to hodně podobné jako ta SQLAlchemy s hlavním rozdílem v tom, že nedefinuješ jen typické datové typy (varchar, int, atd.), ale můžeš použít i speciální jako EmailField, IPAddressField, apod., které jsou v databázi uloženy třeba jako obyčejný varchar, ale při práci mají speciální schopnosti, jako třeba že ten EmailField při přiřazení kontroluje, zda je hodnota platná e-mailová adresa. Teď trochu odbočím, ale musím prozradit jednu z bezkonkurenčních (pokud jsem dobře informován) výhod Djanga oproti jiným webovým frameworkům, a tou je automaticky generovaná administrace. Na základě zadefinovaných modelů generuje velmi propracované administrační rozhraní. Proto je tam taky spousta různých datových typů, které ve výsledku mají vliv jen na chování té administrace (různé formulářové prvky s JS/AJAX vylepšeními). A když jsou nadefinované modely, přide na řadu část View. To znamená nadefinovat šablony pro URL a k nim odpovídající view funkce, které se mají zavolat (dle potřeby s parametry získanými z URL). Tady je to hlavně o hraní s objekty modelů. Ve view získáš potřebná data, která se zpracují v poslední části - Template. Template jsou (X)HTML (nebo XML, nebo jakékoliv jiné) soubory, které obsahují speciální značky, které Django nahradí hodnotou z view. Pole hodnot vypíše cyklem. Aplikuje na hodnoty různé výstupní filtry třeba na pěkné zobrazení data či zaokrouhlení měny. A tak podobně. Je toho spousta, co by šlo o Djangu napsat, doporučuji ale rovnou zkusit. Je to zábava s ním pracovat. Ještě jsem si vzpoměl na jedno video z nějaké přednášky o Djangu, které stojí za to shlédnout http://video.google.com/videoplay?docid=-70449010942275062q=djangoei=7mhpSMG7Jpyc2wLx8dyoCg Honza ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Já myslím, že toto zase není třeba vysvětlovat. Zadej si do Google Django: 1. odkaz: http://www.djangoproject.com/ SQLAlchemy: 1. odkaz: http://www.sqlalchemy.org/ a myslím, že číst už umíš. Tomas On 29.6.2008 22:33, zu1234 wrote: Doufám že to někdo nevezme jako provokaci, ale opravdu by mi občas bodlo dostat se prostě do obrazu. Takže, byl by někdo ochotný obeznámit nás začátečníky s pojmy jako je SQLAlchemy a Django. Ale prosím opět polopatě a prakticky a lidsky. ZU Jan Bednařík napsal(a): 2008/6/29 Jirka Vejrazka [EMAIL PROTECTED]: Možná to k ničemu nebude, ale přihodím trošku do mlýna :-) Momentálně na jednom projektu ke zjednodušení práce s databází (konkrétně MySQL) používám Django. Je sice určené na vývoj webových aplikací, ale vrstva která se stará o databáze je pro mé účely vyhovující a zbytek frameworku prostě ignoruju. Třeba to pomůže... Jirka Na to bych použil spíš SQLAlchemy, ale i ořezané Django může být příjemné řešení. Honza ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Tady je ukazka z dokumentace: http://www.sqlalchemy.org/docs/05/documentation.html#datamapping_joins Nebo muzes proste delat standardni SQL funkce bez tech vopicek. Cili nejjednoduseji treba takhle: from sqlalchemy import create_engine dbe = create_engine('sqlite:///:memory:', echo=True) db = dbe.connect() vysledek = db.execute(LIBOVOLNY SQL DOTAZ).fetchone() Opet vse viz dokumentace. Tomas On 1.7.2008 9:10, azurIt wrote: Ked ste sa uz o tomto tak rozpisali, tak prihodim jednu otazku aj ja. Dost by ma zaujimalo ako sa s tymto daju robit zlozitejsie SQL dotazy, napr. nejake JOINy a podobne. Moc si to neviem predstavit. -Pôvodná správa- Od: Jan Bednařk [mailto:[EMAIL PROTECTED] Komu: Konference PyCZ python@py.cz Predmet: Re: [python] MySQL - nativní rozhraní pro Python 2008/6/29 zu1234 [EMAIL PROTECTED]: Doufám že to někdo nevezme jako provokaci, ale opravdu by mi občas bodlo dostat se prostě do obrazu. Takže, byl by někdo ochotný obeznámit nás začátečníky s pojmy jako je SQLAlchemy a Django. Ale prosím opět polopatě a prakticky a lidsky. ZU SQLAlchemy je aplikace, která ti umožní pracovat s tabulkami a záznamy v databázi jako s běžnými objekty. Je určena pro integraci do jiných aplikací, jako databázová vrstva. Nemusíš tak být odborník na SQL, aby jsi mohl jednoduše a pohodlně pracovat s databází, teoreticky ani nemusíš vědět, jak databáze fungují a co to SQL je. Koukni na http://www.sqlalchemy.org/docs/05/ormtutorial.html a pochopíš, oč jde. Django je RAD (Rapid Application Development) framework pro tvorbu internetových aplikací. Funguje na principu MTV = Model Template View. V první úrovni - Model - nadefinuješ modely. To jsou třídy reprezentující tabulky v databázi a jejich závislosti a pak s nimi pracuješ jako s objekty. Je to hodně podobné jako ta SQLAlchemy s hlavním rozdílem v tom, že nedefinuješ jen typické datové typy (varchar, int, atd.), ale můžeš použít i speciální jako EmailField, IPAddressField, apod., které jsou v databázi uloženy třeba jako obyčejný varchar, ale při práci mají speciální schopnosti, jako třeba že ten EmailField při přiřazení kontroluje, zda je hodnota platná e-mailová adresa. Teď trochu odbočím, ale musím prozradit jednu z bezkonkurenčních (pokud jsem dobře informován) výhod Djanga oproti jiným webovým frameworkům, a tou je automaticky generovaná administrace. Na základě zadefinovaných modelů generuje velmi propracované administrační rozhraní. Proto je tam taky spousta různých datových typů, které ve výsledku mají vliv jen na chování té administrace (různé formulářové prvky s JS/AJAX vylepšeními). A když jsou nadefinované modely, přide na řadu část View. To znamená nadefinovat šablony pro URL a k nim odpovídající view funkce, které se mají zavolat (dle potřeby s parametry získanými z URL). Tady je to hlavně o hraní s objekty modelů. Ve view získáš potřebná data, která se zpracují v poslední části - Template. Template jsou (X)HTML (nebo XML, nebo jakékoliv jiné) soubory, které obsahují speciální značky, které Django nahradí hodnotou z view. Pole hodnot vypíše cyklem. Aplikuje na hodnoty různé výstupní filtry třeba na pěkné zobrazení data či zaokrouhlení měny. A tak podobně. Je toho spousta, co by šlo o Djangu napsat, doporučuji ale rovnou zkusit. Je to zábava s ním pracovat. Ještě jsem si vzpoměl na jedno video z nějaké přednášky o Djangu, které stojí za to shlédnout http://video.google.com/videoplay?docid=-70449010942275062q=djangoei=7mhpSMG7Jpyc2wLx8dyoCg Honza ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Vzpomínám si, jak jsme měřili síly já (SQL) a kolega (Django db vrstva) na jenom praktickém příkladě - měli jsme jako vstup cca 10 vzájemně provázaných tabulek (násobné M:N) a cílem bylo získat dataset pro vyrenderování webové stránky. Kolega, nadšen jednoduchostí objektoveho pristupu k databazi a bez hlubsich znalosti SQL udelal dotaz, ktery nad realnymi daty trval cca 16-20 sekund. Ja za pomoci SQL udelal dotaz, ktery generoval dataset cca 200-300 milisekund. Nakonec jsme společnými silami i to Django dotlačili do podobné výkonnosti jako čisté SQL, ale znamenalo to nejen podrobně znát, jak relační stroje fungují, ale i pro mě dost speciální formát dotazování se objektovým způsobem. Django way jsme nakonec ponechali kvůli kompatibilitě s datovým modelem (v případě rozšíření datového modelu by se musely SQL příkazy přepsat), ale důrazně varuji před přístupem nemusím znát relační databáze, stačí mi objektový wrapper. Marek 2008/7/1 Jan Bednařík [EMAIL PROTECTED]: aplikací, jako databázová vrstva. Nemusíš tak být odborník na SQL, aby jsi mohl jednoduše a pohodlně pracovat s databází, teoreticky ani nemusíš vědět, jak databáze fungují a co to SQL je. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Kolega, nadšen jednoduchostí objektoveho pristupu k databazi a bez hlubsich znalosti SQL udelal dotaz, ktery nad realnymi daty trval cca 16-20 sekund. Ja za pomoci SQL udelal dotaz, ktery generoval dataset cca 200-300 milisekund. Souhlea, myslim ze nikdo neceka ze jakykoli framework bude stejne rychly a efektivni jako dobre napsane SQL. Zvlast pokud je to SQL (ne)zdrave vylepsene desitkami az stovkami hintu :) Pokud potrebuju pracovat s velkym mnozstvim dat (warehouse) a nebo potrebuju vyzdimat posledni kousek rychlosti z databaze (OTLP), pak se _dobre_ naucim SQL (a PL/SQL nebo T-SQL) a optimalizaci. Kdyz budu potrebovat udelat webovou aplikaci ktera pouziva databazi jako neco kam hodim data a pak je tam relativne rychle najdu a ma tam svych 25 tabulek z nichz kazda ma max 8 sloupcu (a jsou celkem malo provazane), klidne sahnu po SQLAlchemy / Django / Pylons / TurboGears / .../ RoR (at nemluvime jenom o Pythonu ;-) Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Dost by ma zaujimalo ako sa s tymto daju robit zlozitejsie SQL dotazy, napr. nejake JOINy a podobne. Moc si to neviem predstavit. Uz to tady padlo, ale hodim link na tu konkretni stranku s dokumentaci: http://www.djangoproject.com/documentation/db-api/ Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Pane Bednařík - super odpověď!!! Moc Vám děkuji. ZU Jan Bednařík napsal(a): 2008/6/29 zu1234 [EMAIL PROTECTED]: Doufám že to někdo nevezme jako provokaci, ale opravdu by mi občas bodlo dostat se prostě do obrazu. Takže, byl by někdo ochotný obeznámit nás začátečníky s pojmy jako je SQLAlchemy a Django. Ale prosím opět polopatě a prakticky a lidsky. ZU SQLAlchemy je aplikace, která ti umožní pracovat s tabulkami a záznamy v databázi jako s běžnými objekty. Je určena pro integraci do jiných aplikací, jako databázová vrstva. Nemusíš tak být odborník na SQL, aby jsi mohl jednoduše a pohodlně pracovat s databází, teoreticky ani nemusíš vědět, jak databáze fungují a co to SQL je. Koukni na http://www.sqlalchemy.org/docs/05/ormtutorial.html a pochopíš, oč jde. Django je RAD (Rapid Application Development) framework pro tvorbu internetových aplikací. Funguje na principu MTV = Model Template View. V první úrovni - Model - nadefinuješ modely. To jsou třídy reprezentující tabulky v databázi a jejich závislosti a pak s nimi pracuješ jako s objekty. Je to hodně podobné jako ta SQLAlchemy s hlavním rozdílem v tom, že nedefinuješ jen typické datové typy (varchar, int, atd.), ale můžeš použít i speciální jako EmailField, IPAddressField, apod., které jsou v databázi uloženy třeba jako obyčejný varchar, ale při práci mají speciální schopnosti, jako třeba že ten EmailField při přiřazení kontroluje, zda je hodnota platná e-mailová adresa. Teď trochu odbočím, ale musím prozradit jednu z bezkonkurenčních (pokud jsem dobře informován) výhod Djanga oproti jiným webovým frameworkům, a tou je automaticky generovaná administrace. Na základě zadefinovaných modelů generuje velmi propracované administrační rozhraní. Proto je tam taky spousta různých datových typů, které ve výsledku mají vliv jen na chování té administrace (různé formulářové prvky s JS/AJAX vylepšeními). A když jsou nadefinované modely, přide na řadu část View. To znamená nadefinovat šablony pro URL a k nim odpovídající view funkce, které se mají zavolat (dle potřeby s parametry získanými z URL). Tady je to hlavně o hraní s objekty modelů. Ve view získáš potřebná data, která se zpracují v poslední části - Template. Template jsou (X)HTML (nebo XML, nebo jakékoliv jiné) soubory, které obsahují speciální značky, které Django nahradí hodnotou z view. Pole hodnot vypíše cyklem. Aplikuje na hodnoty různé výstupní filtry třeba na pěkné zobrazení data či zaokrouhlení měny. A tak podobně. Je toho spousta, co by šlo o Djangu napsat, doporučuji ale rovnou zkusit. Je to zábava s ním pracovat. Ještě jsem si vzpoměl na jedno video z nějaké přednášky o Djangu, které stojí za to shlédnout http://video.google.com/videoplay?docid=-70449010942275062q=djangoei=7mhpSMG7Jpyc2wLx8dyoCg Honza ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
On je základní problém, že databáze jsou relační, zatímco neustále se různé frameworky snaží z toho udělat objektový přístup. A rozdíl mezi těmito dvěma pojetí je tak značný, že objektový přístup nemůže být efektivní. Ale zase - každý luxus něco stojí a je třeba vědět, zda se vyplatí, nebo ne. U objektového přístupu k relačním databázím je ten luxus (ztráta rychlosti) velmi značný, a v zásadě se vyplatí jen tehdy, pokud a) máte dostatečnou rezervu ve výkonu databáze, b) honíte tam přímo data z jednotlivých tabulek, v krajním případě dvou přes cizí klíč. Když to tak sleduji (o SQLAlchemy ani Django jsem nevěděl, ale studoval jsem), tak se téměř nikomu tento převod, kdy se na relační databázi dávám nějakým objektovým pohledem přes univerzální framework moc nepovedl. Přiznám se sám, že asi to chce ten OOP interface vymyslet jinak - to je můj vnitřní silný pocit. Na druhé straně musím uznat, že pro jednoduché sáhnutí do tabulky je to velmi luxusní a dostačující. On totiž SQL jazyk je dost schopný a různorodý a jdou tím až neuvěřitelné zázraky. A nedokážu si dost dobře představit, že bych přes framework hodil třeba to, co jsem teď stvořil (předem upozorňuji, že pro databázi jde o velmi efektivní dotaz, který zpracuje v zanedbatelném čase): SELECT plant_id,name,(SELECT name FROM plant_name AS n WHERE n.plant_id=boss.plant_id AND language='lt' ORDER BY priority,type LIMIT 1) AS lt_name,(SELECT GROUP_CONCAT(o.cs_name ORDER BY o.astrological_object_id SEPARATOR ',') FROM plant_astrological_object AS o WHERE o.astrological_object_id IN (SELECT astrological_object_id FROM plant_mn_object_plant AS rel WHERE rel.plant_id=boss.plant_id)) AS objects FROM plant_name AS boss WHERE fulltext_name LIKE '%' AND language IN ('cs') ORDER BY name COLLATE utf8_czech_ci Přitom jde o velmi jednoduchý SQL dotaz, a asi bych si nedokázal představit jak bych to nacpal přes framework. Obrovská výhoda frameworků ale je - a to je jejich neskutečně silná stránka, která se nedá pominout - že jsou nezávislé na konkrétním databázovém stroji. Prostě znelíbí se vám databáze XY, tak jí prostě vyměníte za jinou, a z hlediska aplikace se nic nemění. Všechny závislosti na konkrétní databázi vyřídí framework sám - a kvůli tomu se také velmi tyto abstrakční vrstvy používají. To je velmi častý důvod jejich nasazení. Platí se za to ovšem ztrátou výkonu a někdy dost značnou neefektivností ve složitějších datových případech. Miloslav Ponkrác Jirka Vejrazka napsal(a): Kolega, nadšen jednoduchostí objektoveho pristupu k databazi a bez hlubsich znalosti SQL udelal dotaz, ktery nad realnymi daty trval cca 16-20 sekund. Ja za pomoci SQL udelal dotaz, ktery generoval dataset cca 200-300 milisekund. Souhlea, myslim ze nikdo neceka ze jakykoli framework bude stejne rychly a efektivni jako dobre napsane SQL. Zvlast pokud je to SQL (ne)zdrave vylepsene desitkami az stovkami hintu :) Pokud potrebuju pracovat s velkym mnozstvim dat (warehouse) a nebo potrebuju vyzdimat posledni kousek rychlosti z databaze (OTLP), pak se _dobre_ naucim SQL (a PL/SQL nebo T-SQL) a optimalizaci. Kdyz budu potrebovat udelat webovou aplikaci ktera pouziva databazi jako neco kam hodim data a pak je tam relativne rychle najdu a ma tam svych 25 tabulek z nichz kazda ma max 8 sloupcu (a jsou celkem malo provazane), klidne sahnu po SQLAlchemy / Django / Pylons / TurboGears / .../ RoR (at nemluvime jenom o Pythonu ;-) Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Souhlea, myslim ze nikdo neceka ze jakykoli framework bude stejne rychly a efektivni jako dobre napsane SQL. Na druhou stranu ocekavam, ze standardni webova aplikace (a toto byla standardni webova aplikace, zadny DWH) bude mit standardni dobu odezvy. Ja nehazim spinu na Django, sam ho a jeho databazovou vrstvu pouzivam. Jen pripominam, ze i v dobe high level jazyků a nástrojů je potřeba znát background a principy. Ani dnes bez toho nejde napsat kloudná webová aplikace. Marek ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Ja nehazim spinu na Django, sam ho a jeho databazovou vrstvu pouzivam. Jen pripominam, ze i v dobe high level jazyků a nástrojů je potřeba znát background a principy. Ani dnes bez toho nejde napsat kloudná webová aplikace. Kde to muzu podepsat? ;-) Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Mohl by, prosím, někdo začátečníkovi vysvětlit po-lopatě pojem 'wraper'. DB API chápu jako balík stejných fcí pro práci nad 'jakýmkoliv' databázovým strojem. ZU Věroslav Kaplan napsal(a): 2008/6/28 superman [EMAIL PROTECTED]: Dobrý den, když pracuji s MySQL v Pythonu, tak obvykle přes standardní DB API Pythonu. Bohužel MySQL je v leččems trochu nestandardní a řadu věcí je lépe dělat přes nativní API. Existuje pro Python nějaký wrapper pro nativní API, nebo jiná knihovna? Možná jsem špatně hledal, nevím... _mysql je wrapper okolo C API, oproti tomu MySQLdb je wrapper na _mysql, abi odpovídalo DB API. Na mém stroji to vypadá, že obsahují různé symboly. Kvalitu modulu _mysql neposoudím, protože do C API MySQL nevidím, ale třeba to k něčemu bude. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
To víte že to pomohlo - děkuji za velmi pěkné vysvětlení!! Takže hotový program v pythonu se skládá z python-jazyka a různých wrapperů pro to, co vlastní python neumí. Normálně bych tomu řekl mezi-ksicht alias interface. Díky! ZU Filip Štědronský napsal(a): On Po, čen 30, 2008 at 08:04:02 +0200, zu1234 wrote: Mohl by, prosím, někdo začátečníkovi vysvětlit po-lopatě pojem 'wraper'. Dobrý den, wrapper je doslava přeloženo obal, tedy sada funkcí/ tříd/metod/čehokoliv, která zapouzdřuje jinou sadu funkcí /metod/tříd/čehokoliv, poskytuje k ní jiné rozhraní. Je běžné, že když se píší moduly pro Python zapouzdřující existující (Cčkové, nativní, kompilované) knihovny, jako je GTK, MySQL client library, etc., napíše se v C (pomocí Python-C API, což je nevyhnutelné, neb není jiný způsob, jak propojit dynamický svět Pythonu s kompilovaným Cčkovým okolím jen jednoduchý obal Cčkovských funkcí, často 1:1 mapování C funkcí na Pythonské, protože psát moduly v C není dvakrát jednoduché. Ale jakmile je rozhraní knihovny jednou Pythonu zpřístupněno (byť ve své Cčkové ošklivosti) pomocí tohoto wrapperu, který obaluje původní funkce určitými rozhraními potřebnými k tomu, aby je šlo volat z Pythonu, není problém napsat další, vysokoúrovňový, objektový obal přímo v Pythonu (to již je snadné), který zapouzdřuje před uživatelem tyto jednoduché funkce a nabízí konzistentní a příjemné rozhraní. Taktéž se toho používá pro skrývání implementačních rozdílů (stejné rozhraní postavené nad několika různými moduly, např. zmíněné DB API) Doufám, že to pomůže. Filip Štědronský ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Wrapper a interface je obrovský rozdíl! Interface je jen způsob komunikace mezi dvěma systémy, tedy dá se říct virtuální popis toho, jak se bude komunikovat. Wrapper je zase převodník, nebo jak se v hw světě říká redukce z jednoho interface na jiný interface, a není to popis, ale implementace - tedy skutečné provedení. Miloslav Ponkrác P.S.: Děkuji za odpovědi, právě jsem si je pročetl a budu zkoušet, a dám vědět :-) zu1234 napsal(a): To víte že to pomohlo - děkuji za velmi pěkné vysvětlení!! Takže hotový program v pythonu se skládá z python-jazyka a různých wrapperů pro to, co vlastní python neumí. Normálně bych tomu řekl mezi-ksicht alias interface. Díky! ZU ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Ano, pane Ponkác, vaše definice je přesná. ZU superman napsal(a): Wrapper a interface je obrovský rozdíl! Interface je jen způsob komunikace mezi dvěma systémy, tedy dá se říct virtuální popis toho, jak se bude komunikovat. Wrapper je zase převodník, nebo jak se v hw světě říká redukce z jednoho interface na jiný interface, a není to popis, ale implementace - tedy skutečné provedení. Miloslav Ponkrác P.S.: Děkuji za odpovědi, právě jsem si je pročetl a budu zkoušet, a dám vědět :-) zu1234 napsal(a): To víte že to pomohlo - děkuji za velmi pěkné vysvětlení!! Takže hotový program v pythonu se skládá z python-jazyka a různých wrapperů pro to, co vlastní python neumí. Normálně bych tomu řekl mezi-ksicht alias interface. Díky! ZU ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
2008/6/29 Jirka Vejrazka [EMAIL PROTECTED]: Možná to k ničemu nebude, ale přihodím trošku do mlýna :-) Momentálně na jednom projektu ke zjednodušení práce s databází (konkrétně MySQL) používám Django. Je sice určené na vývoj webových aplikací, ale vrstva která se stará o databáze je pro mé účely vyhovující a zbytek frameworku prostě ignoruju. Třeba to pomůže... Jirka Na to bych použil spíš SQLAlchemy, ale i ořezané Django může být příjemné řešení. Honza ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
Doufám že to někdo nevezme jako provokaci, ale opravdu by mi občas bodlo dostat se prostě do obrazu. Takže, byl by někdo ochotný obeznámit nás začátečníky s pojmy jako je SQLAlchemy a Django. Ale prosím opět polopatě a prakticky a lidsky. ZU Jan Bednařík napsal(a): 2008/6/29 Jirka Vejrazka [EMAIL PROTECTED]: Možná to k ničemu nebude, ale přihodím trošku do mlýna :-) Momentálně na jednom projektu ke zjednodušení práce s databází (konkrétně MySQL) používám Django. Je sice určené na vývoj webových aplikací, ale vrstva která se stará o databáze je pro mé účely vyhovující a zbytek frameworku prostě ignoruju. Třeba to pomůže... Jirka Na to bych použil spíš SQLAlchemy, ale i ořezané Django může být příjemné řešení. Honza ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
O SQLAlchemy nic psat nemuzu, nikdy jsem s tim nepracoval. Django je framework pro psani webovych aplikaci (jeden z mnoha), ktery mimo jine obsahuje funkcnost pro praci s databazi pythonovskym zpusobem. Tj. misto toho abych pracoval primo v databazovem jazyce SQL a psal: SELECT ulice FROM adresy WHERE ulice LIKE '%Sokolska%' nebo INSERT INTO adresy (ulice) VALUES ('Sokolska') muzu pracovat primo s objekty v Pythonu, tj. pouziju: from app.models import Adresa sokolska = Adresa.objects.filter(ulice__contains='Sokolska') prvni_sokolska = sokolska[0] posledni_sokolska = sokolska[-1] Pokud chci neco ulozit do databaze, nemusim resit na urovni databazoveho SQL jestli budu delat INSERT nebo UPDATE, proste vezmu odpovidajici objekt a zavolam jeho metodu save() prvni_sokolska.ulice = 'Sokolska_zmenena' prvni_sokolska.save() (tohle jsou _hodne_ zjednodusene priklady, pochopitelne) Django umi pracovat s ruznymi databazemi na pozadi (predpokladam ze SQLAlchemy taky). Pokud byste chteli pouzit Django jenom pro zjednoduseni prace s databazi, je to asi spatny napad (ja to tak delam, ale mam i jine duvody). Pokud byste chteli vyvijed webovou aplikaci v Pythonu, stoji Django rozhodne za zvazeni (ale neni to jedina moznost). Vice se da najit na http://www.djangoproject.com/documentation/ nebo na http://www.djangobook.com/en/1.0/ (ta se da koupit i v papirove podobe). I u nas se par lidi pouzivajicich Django najde, viz http://djangopeople.net/cz/. Tak, a ted si pripadam jako bych Django prodaval a mel z toho provize ;-) Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
2008/6/29 zu1234 [EMAIL PROTECTED]: Doufám že to někdo nevezme jako provokaci, ale opravdu by mi občas bodlo dostat se prostě do obrazu. Takže, byl by někdo ochotný obeznámit nás začátečníky s pojmy jako je SQLAlchemy a Django. Ale prosím opět polopatě a prakticky a lidsky. ZU SQLAlchemy je aplikace, která ti umožní pracovat s tabulkami a záznamy v databázi jako s běžnými objekty. Je určena pro integraci do jiných aplikací, jako databázová vrstva. Nemusíš tak být odborník na SQL, aby jsi mohl jednoduše a pohodlně pracovat s databází, teoreticky ani nemusíš vědět, jak databáze fungují a co to SQL je. Koukni na http://www.sqlalchemy.org/docs/05/ormtutorial.html a pochopíš, oč jde. Django je RAD (Rapid Application Development) framework pro tvorbu internetových aplikací. Funguje na principu MTV = Model Template View. V první úrovni - Model - nadefinuješ modely. To jsou třídy reprezentující tabulky v databázi a jejich závislosti a pak s nimi pracuješ jako s objekty. Je to hodně podobné jako ta SQLAlchemy s hlavním rozdílem v tom, že nedefinuješ jen typické datové typy (varchar, int, atd.), ale můžeš použít i speciální jako EmailField, IPAddressField, apod., které jsou v databázi uloženy třeba jako obyčejný varchar, ale při práci mají speciální schopnosti, jako třeba že ten EmailField při přiřazení kontroluje, zda je hodnota platná e-mailová adresa. Teď trochu odbočím, ale musím prozradit jednu z bezkonkurenčních (pokud jsem dobře informován) výhod Djanga oproti jiným webovým frameworkům, a tou je automaticky generovaná administrace. Na základě zadefinovaných modelů generuje velmi propracované administrační rozhraní. Proto je tam taky spousta různých datových typů, které ve výsledku mají vliv jen na chování té administrace (různé formulářové prvky s JS/AJAX vylepšeními). A když jsou nadefinované modely, přide na řadu část View. To znamená nadefinovat šablony pro URL a k nim odpovídající view funkce, které se mají zavolat (dle potřeby s parametry získanými z URL). Tady je to hlavně o hraní s objekty modelů. Ve view získáš potřebná data, která se zpracují v poslední části - Template. Template jsou (X)HTML (nebo XML, nebo jakékoliv jiné) soubory, které obsahují speciální značky, které Django nahradí hodnotou z view. Pole hodnot vypíše cyklem. Aplikuje na hodnoty různé výstupní filtry třeba na pěkné zobrazení data či zaokrouhlení měny. A tak podobně. Je toho spousta, co by šlo o Djangu napsat, doporučuji ale rovnou zkusit. Je to zábava s ním pracovat. Ještě jsem si vzpoměl na jedno video z nějaké přednášky o Djangu, které stojí za to shlédnout http://video.google.com/videoplay?docid=-70449010942275062q=djangoei=7mhpSMG7Jpyc2wLx8dyoCg Honza ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
2008/6/28 superman [EMAIL PROTECTED]: Dobrý den, když pracuji s MySQL v Pythonu, tak obvykle přes standardní DB API Pythonu. Bohužel MySQL je v leččems trochu nestandardní a řadu věcí je lépe dělat přes nativní API. Existuje pro Python nějaký wrapper pro nativní API, nebo jiná knihovna? Možná jsem špatně hledal, nevím... _mysql je wrapper okolo C API, oproti tomu MySQLdb je wrapper na _mysql, abi odpovídalo DB API. Na mém stroji to vypadá, že obsahují různé symboly. Kvalitu modulu _mysql neposoudím, protože do C API MySQL nevidím, ale třeba to k něčemu bude. --VK [EMAIL PROTECTED]:~$ python import _mysql dir(_mysql) ['DataError', 'DatabaseError', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'MySQLError', 'NULL', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'Warning', '__doc__', '__file__', '__name__', '__version__', 'connect', 'connection', 'debug', 'escape', 'escape_dict', 'escape_sequence', 'escape_string', 'get_client_info', 'result', 'server_end', 'server_init', 'string_literal', 'thread_safe', 'version_info'] import MySQLdb dir(MySQLdb) ['BINARY', 'Binary', 'Connect', 'Connection', 'DATE', 'DATETIME', 'DBAPISet', 'DataError', 'DatabaseError', 'Date', 'DateFromTicks', 'Error', 'FIELD_TYPE', 'ImmutableSet', 'IntegrityError', 'InterfaceError', 'InternalError', 'MySQLError', 'NULL', 'NUMBER', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'ROWID', 'STRING', 'TIME', 'TIMESTAMP', 'Time', 'TimeFromTicks', 'Timestamp', 'TimestampFromTicks', 'Warning', '__all__', '__author__', '__builtins__', '__doc__', '__file__', '__name__', '__path__', '__revision__', '__version__', '_mysql', 'apilevel', 'connect', 'connection', 'constants', 'debug', 'escape', 'escape_dict', 'escape_sequence', 'escape_string', 'get_client_info', 'paramstyle', 'release', 'result', 'server_end', 'server_init', 'string_literal', 'thread_safe', 'threadsafety', 'times', 'version_info'] ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
když pracuji s MySQL v Pythonu, tak obvykle přes standardní DB API Pythonu. Bohužel MySQL je v leččems trochu nestandardní a řadu věcí je lépe dělat přes nativní API. Existuje pro Python nějaký wrapper pro nativní API, nebo jiná knihovna? Možná jsem špatně hledal, nevím... Možná to k ničemu nebude, ale přihodím trošku do mlýna :-) Momentálně na jednom projektu ke zjednodušení práce s databází (konkrétně MySQL) používám Django. Je sice určené na vývoj webových aplikací, ale vrstva která se stará o databáze je pro mé účely vyhovující a zbytek frameworku prostě ignoruju. Třeba to pomůže... Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] MySQL - nativní rozhraní pro Python
Dobrý den, když pracuji s MySQL v Pythonu, tak obvykle přes standardní DB API Pythonu. Bohužel MySQL je v leččems trochu nestandardní a řadu věcí je lépe dělat přes nativní API. Existuje pro Python nějaký wrapper pro nativní API, nebo jiná knihovna? Možná jsem špatně hledal, nevím... Děkuji moc za každý podnět. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] MySQL - nativní rozhraní pro Python
http://sourceforge.net/projects/mysql-python MySQL support for Python. MySQL versions 3.23-5.1; and Python versions 2.3-2.5 are supported. MySQLdb is the Python DB API-2.0 interface.* _mysql is a low-level API similiar to the MySQL C API*. ZMySQLDA is a Database Adapter for Zope2. Je to ono ? Tomas On 28.6.2008 13:34, superman wrote: Dobrý den, když pracuji s MySQL v Pythonu, tak obvykle přes standardní DB API Pythonu. Bohužel MySQL je v leččems trochu nestandardní a řadu věcí je lépe dělat přes nativní API. Existuje pro Python nějaký wrapper pro nativní API, nebo jiná knihovna? Možná jsem špatně hledal, nevím... Děkuji moc za každý podnět. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python