Thread View: pl.comp.lang.python
5 messages
5 total messages
Started by K507
Sat, 07 Dec 2002 23:13
bazy danyc odbc
Author: K507
Date: Sat, 07 Dec 2002 23:13
Date: Sat, 07 Dec 2002 23:13
4 lines
1007 bytes
1007 bytes
Szukam jakiś materiałów najlepiej po polsku :) które by w przystępny sposób opisywały korzystanie z baz danych głównie ale nie tylko ODBC pod Pythonem I ogólnie tworzenia pod nim aplikacji bazodanowych
Re: bazy danyc odbc
Author: Adam Buraczewski
Date: Sun, 08 Dec 2002 00:21
Date: Sun, 08 Dec 2002 00:21
113 lines
4837 bytes
4837 bytes
K507 <spam@nie.pl> wrote:
> Szukam jaki? materia??w najlepiej po polsku :)
> kt?re by w przyst?pny spos?b opisywa?y korzystanie
> z baz danych g??wnie ale nie tylko ODBC pod Pythonem
> I og?lnie tworzenia pod nim aplikacji bazodanowych
OK, spróbuję opisać. Ogólna recepta postępowania:
1. Musisz zdobyć specyfikację DBI 2.0 ze strony:
http://www.python.org/topics/database/
Ten dokument opisuje jak mają się zachowywać wszystkie sterowniki do
baz danych, większość autorów sterowników respektuje te zalecenia.
Przeczytaj to, naucz się, w wielu przypadkach nie znajdziesz lepszej
dokumentacji.
2. Musisz zdobyć pakiet egenix-mx-base ze strony:
http://www.lemburg.com/files/python/
i go zainstalować. Warto, bo jest ciekawy i wiele sterowników DBI
z niego korzysta. Pakiet ten jest bezpłatny, nawet do celów
komercyjnych.
3. Musisz zdobyć sterownik do odpowiedniej bazy danych, spora lista
jest pod adresem z pkt. 1, oraz na stronie:
http://www.vex.net/parnassus/
Jeżeli chcesz ODBC, to najlepszy możliwy sterownik (mxODBC) jest pod
adresem z pkt. 2, ale do celów komercyjnych jest płatny. Oczywiście
musisz wszystko zainstalować. Jeżeli możesz, używaj raczej
specjalizowanych sterowników do konkretnych baz danych, będziesz mógł
wtedy z nich wyciągnąć więcej ciekawych możliwości, których windowsowy
mechanizm ODBC nie oferuje.
4. W programie musisz najpierw "zaimportować" odpowiedni sterownik
DBI, na przykład tak:
import modul_ze_sterownikiem as DBI
Oczywiście zamiast modul_ze_sterownikiem musisz wpisać faktyczną nazwę
sterownika DBI, którego używasz. Potem musisz nawiązać połączenie:
connection = DBI.connect(parametry)
W powyższej linijce trzeba podać odpowiednie parametry, w zależności
od sterownika: nazwę bazy danych, adres komputera, nazwę użytkownika,
hasło itp. Dla ODBC wystarczy podać nazwę DSN (czy jak to tam się
nazywa pod Windows). Po szczegóły odsyłam do dokumentacji.
Do realizacji właściwych zapytań musisz stworzyć sobie tzw. kursory,
których może być zwykle więcej niż 1 równocześnie:
cursor1 = connection.cursor()
cursor2 = connection.cursor()
Potem wysyłasz do bazy zapytanie:
cursor1.execute("select kol1, kol2 from tabela")
i odczytujesz odpowiedzi:
while 1:
row = cursor1.fetchone()
if row is None: break
kol1 = row[0]
kol2 = row[1]
# Jakieś dalsze przetwarzanie danych.
Odczytuje się, jak widać, za pomocą funkcji fetchone(), która zwraca
wiersz wyniku w postaci tablicy, albo None jak już wszystkie dane są
odczytane. Możesz użyć fetchall(), która to funkcja odczyta od razu
całą tabelę i zrobi z niej tablicę tablic.
Jeżeli w wierszu wyniku są wartości NULL, to sterownik automatycznie
zamienia je na None.
Kursory możesz używać wielokrotnie. Jeżeli chcesz przekazać jakieś
parametry, to robisz to tak:
cursor2.execute("""
select * from tabela
where pole1 = %s and pole2 = %s
""", parametr1, parametr2)
Podane parametry zostaną wstawione zamiast znaczków "%s". Jeżeli
parametrem jest None, to zostanie zamieniony na NULL. Jeżeli jest
łańcuchem tekstu, to zostanie ujęty w apostrofy, a wszystkie znaki
specjalne zostaną poprzedzone backslashem itp. Trzeba podać tyle
parametrów ile jest znaczków "%s", to oczywiste. Acha, należy podawać
zawsze %s, niezależnie czy parametr jest łańcuchem tekstu czy liczbą.
Po użyciu kursor można zamknąć:
cursor1.close()
cursor2.close()
i rozłączyć się od bazy danych:
connection.close()
Proste? :) Zauważ, że niezależnie od użytej bazy danych dostęp jest
właściwie taki sam. Jedynie to co wysyła się jako parametr execute()
musi być zgodne z tym co konkretna baza danych akceptuje.
Pozdrawiam!
--
Adam Buraczewski <adamb@polbox.pl> * Linux registered user #165585
GCS/TW d- s-:+>+:- a- C+++(++++) UL++++$ P++ L++++ E++ W+ N++ o? K? w--
O M- V- PS+ !PE Y PGP+ t+ 5 X+ R tv- b+ DI? D G++ e+++>++++ h r+>++ y?
Re: bazy danyc odbc
Author: K507
Date: Sun, 08 Dec 2002 03:06
Date: Sun, 08 Dec 2002 03:06
14 lines
1476 bytes
1476 bytes
> Proste? :) Zauważ, że niezależnie od użytej bazy danych dostęp jest > właściwie taki sam. Jedynie to co wysyła się jako parametr execute() > musi być zgodne z tym co konkretna baza danych akceptuje. > > Pozdrawiam! > Dzięki czytając tę wypowiedz i jeszcze kilka wątków myśle że można zastanowić się nad jakimś FAQ dla grupy nie chodzi że pytania się powtarzają ale pewne żeczy można opracować i zamieścić w jakieść dostępnej formie chyba niewielkim nakładem pracy.
Re: bazy danyc odbc
Author: P.Szpakowicz
Date: Sat, 14 Dec 2002 21:25
Date: Sat, 14 Dec 2002 21:25
21 lines
1659 bytes
1659 bytes
Użytkownik "K507" <spam@nie.pl> napisał w wiadomości
news:asud1b$e5v$1@news.onet.pl...
> Dzięki czytając tę wypowiedz i jeszcze kilka wątków myśle że można
> zastanowić
> się nad jakimś FAQ dla grupy nie chodzi że pytania się powtarzają ale
pewne
> żeczy
> można opracować i zamieścić w jakieść dostępnej formie chyba niewielkim
> nakładem
> pracy.
Wydaje mi sie, ze z tego wyszla by calkiem niezla ksiazka. :) Pomysl jest
dobry i ja go popieram. Szczegolnie, ze sam jestem nowym uzytkownikiem
Pythona i nie chce Was meczyc prostymi pytaniami, ktore zreszta juz byly na
grupie
pozdrawiam
--
P.Szpakowicz
Re: bazy danyc odbc
Author: Adam Przybyla
Date: Sat, 14 Dec 2002 21:38
Date: Sat, 14 Dec 2002 21:38
23 lines
1856 bytes
1856 bytes
P.Szpakowicz <P.Szpakowicz@wsisiz.edu.pl> wrote: > U?ytkownik "K507" <spam@nie.pl> napisa? w wiadomo?ci > news:asud1b$e5v$1@news.onet.pl... >> Dzi?ki czytaj?c t? wypowiedz i jeszcze kilka w?tk?w my?le ?e mo?na >> zastanowi? >> si? nad jakim? FAQ dla grupy nie chodzi ?e pytania si? powtarzaj? ale > pewne >> ?eczy >> mo?na opracowa? i zamie?ci? w jakie?? dost?pnej formie chyba niewielkim >> nak?adem >> pracy. > Wydaje mi sie, ze z tego wyszla by calkiem niezla ksiazka. :) Pomysl jest > dobry i ja go popieram. Szczegolnie, ze sam jestem nowym uzytkownikiem > Pythona i nie chce Was meczyc prostymi pytaniami, ktore zreszta juz byly na > grupie > pozdrawiam ... to pytaj, narazie grupa tez jest nowa nie wiemy jeszcze co poczatkujacy potrzebuja, jak narazie widze tu same mocno zaawansowane osoby;-) Z powazaniem Adam Przybyla
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads