Thread View: pl.comp.lang.python
5 messages
5 total messages
Started by Ogryzek
Fri, 06 Dec 2002 08:23
addslashes
Author: Ogryzek
Date: Fri, 06 Dec 2002 08:23
Date: Fri, 06 Dec 2002 08:23
8 lines
1103 bytes
1103 bytes
Witam grupowiczow Chcialbym wczytywac do bazy mySql stringi zawierajace znaki ' " / \ . Jaka funkcja podobna do addslashes w php, bedzie dodawac mi / przed danymi znakami. Jakby ktos wiedzial jaki modul i jaka funkcja to wykonuje to z gory dzieki. Pozdrawiam Lukasz Slowik alias Ogryzek
Re: addslashes
Author: Ogryzek
Date: Fri, 06 Dec 2002 09:28
Date: Fri, 06 Dec 2002 09:28
13 lines
1197 bytes
1197 bytes
Juz znalazlem re.escape > Witam grupowiczow > Chcialbym wczytywac do bazy mySql stringi zawierajace znaki ' " / \ . Jaka > funkcja podobna do addslashes w php, bedzie dodawac mi / przed danymi > znakami. Jakby ktos wiedzial jaki modul i jaka funkcja to wykonuje to z gory > dzieki. > > Pozdrawiam > Lukasz Slowik alias Ogryzek > >
Re: addslashes
Author: Adam Buraczewski
Date: Fri, 06 Dec 2002 20:39
Date: Fri, 06 Dec 2002 20:39
46 lines
2930 bytes
2930 bytes
Ogryzek <slukas5@poczta.onet.pl> wrote:
> Chcialbym wczytywac do bazy mySql stringi zawierajace znaki ' " / \ . Jaka
> funkcja podobna do addslashes w php, bedzie dodawac mi / przed danymi
> znakami.
Nie, to nie tak. To nie Ty masz wstawiać te backslashe, to interfejs
do baz danych (byle zgodny ze standardem DBI) ma sam zadbać, żeby te
wszystkie backslashe i apostrofy w odpowiednim momencie dodać. Tylko
trzeba go umieć wykorzystać. Piszesz np. tak:
napis = r"Tu napis z apostrofami ', backslashami \ i innymi cudami"
a potem otwierasz połączenie z bazą danych (nie ważne jaką, to może
być MySQL, Oracle, PostgreSQL, albo cokolwiek przez ODBC) i piszesz:
c = connection.cursor()
c.execute("insert into tabela values (%s)", napis)
c.close()
Zwróć uwagę, że chociaż w poleceniu SQL używa się znaczka %s w miejscu
parametru, to nie używa się operatora %, a dane przekazuje się do
funkcji execute(), która się już nimi zajmuje. Parametry te są
wewnątrz execute() escape'owane wg reguł odpowiednich dla konkretnej
bazy danych, a o to jakie są te reguły martwi się "sterownik" a nie
Ty. Ważne jest, że w efekcie do serwera bazodanowego polecenie jest
już wysyłane tak jak byś tego oczekiwał, czyli z argumentami
tekstowymi ujętymi w apostrofy i z backslashami. A jakby przez ten
przekazywany parametr był równy None, to sterownik sam go zamienia na
NULL.
Przy okazji cały ten jednolity mechanizm pozwala na szybką zmianę
używanego systemu bazodanowego, bez większych zmian w kodzie programu.
Dzięki temu kiedyś napisałem program, który dostawał się do Acessa
przez ODBC, a gdy udało mi się "uwolnić" firmę od tej bazy danych, po
zmianie kilku linijek wszystko pracowało na PostgreSQLu.
Podobnie zrealizowane są sterowniki dostępu do baz danych w innych
językach programowania (Perl, Java), to tylko w PHP zwykle się dużo
samemu manipuluje na napisach :(
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: addslashes
Author: Jarosław Zabiełło
Date: Sun, 08 Dec 2002 11:27
Date: Sun, 08 Dec 2002 11:27
10 lines
1272 bytes
1272 bytes
On Fri, 6 Dec 2002 21:39:02 +0100, Adam Buraczewski <adamb@polbox.pl> wrote: >Podobnie zrealizowane są sterowniki dostępu do baz danych w innych >językach programowania (Perl, Java), to tylko w PHP zwykle się dużo >samemu manipuluje na napisach :( Nie ma takiej potrzeby, aby korzystać z surowych funkcji PHP do baz danych. PHP ma również dobrą abstrakcję do tego typu połączeń: http://pear.php.net/manual/en/core.db.php
Re: addslashes
Author: Ogryzek
Date: Tue, 10 Dec 2002 15:58
Date: Tue, 10 Dec 2002 15:58
47 lines
3062 bytes
3062 bytes
Wow, to bylo wielkie
Wielkie dzieki, rozjasnilo mi sie w mozgownicy
Z wyrazami szacunku
Lukasz Slowik alias Ogryzek
> > Chcialbym wczytywac do bazy mySql stringi zawierajace znaki ' " / \ .
Jaka
> > funkcja podobna do addslashes w php, bedzie dodawac mi / przed danymi
> > znakami.
>
> Nie, to nie tak. To nie Ty masz wstawiać te backslashe, to interfejs
> do baz danych (byle zgodny ze standardem DBI) ma sam zadbać, żeby te
> wszystkie backslashe i apostrofy w odpowiednim momencie dodać. Tylko
> trzeba go umieć wykorzystać. Piszesz np. tak:
>
> napis = r"Tu napis z apostrofami ', backslashami \ i innymi cudami"
>
> a potem otwierasz połączenie z bazą danych (nie ważne jaką, to może
> być MySQL, Oracle, PostgreSQL, albo cokolwiek przez ODBC) i piszesz:
>
> c = connection.cursor()
> c.execute("insert into tabela values (%s)", napis)
> c.close()
>
> Zwróć uwagę, że chociaż w poleceniu SQL używa się znaczka %s w miejscu
> parametru, to nie używa się operatora %, a dane przekazuje się do
> funkcji execute(), która się już nimi zajmuje. Parametry te są
> wewnątrz execute() escape'owane wg reguł odpowiednich dla konkretnej
> bazy danych, a o to jakie są te reguły martwi się "sterownik" a nie
> Ty. Ważne jest, że w efekcie do serwera bazodanowego polecenie jest
> już wysyłane tak jak byś tego oczekiwał, czyli z argumentami
> tekstowymi ujętymi w apostrofy i z backslashami. A jakby przez ten
> przekazywany parametr był równy None, to sterownik sam go zamienia na
> NULL.
>
> Przy okazji cały ten jednolity mechanizm pozwala na szybką zmianę
> używanego systemu bazodanowego, bez większych zmian w kodzie programu.
> Dzięki temu kiedyś napisałem program, który dostawał się do Acessa
> przez ODBC, a gdy udało mi się "uwolnić" firmę od tej bazy danych, po
> zmianie kilku linijek wszystko pracowało na PostgreSQLu.
>
> Podobnie zrealizowane są sterowniki dostępu do baz danych w innych
> językach programowania (Perl, Java), to tylko w PHP zwykle się dużo
> samemu manipuluje na napisach :(
>
> Pozdrawiam!
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