🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
5 messages
5 total messages Started by Ogryzek Fri, 06 Dec 2002 08:23
addslashes
#247
Author: Ogryzek
Date: Fri, 06 Dec 2002 08:23
8 lines
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
#248
Author: Ogryzek
Date: Fri, 06 Dec 2002 09:28
13 lines
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
#249
Author: Adam Buraczewski
Date: Fri, 06 Dec 2002 20:39
46 lines
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
#250
Author: Jarosław Zabiełło
Date: Sun, 08 Dec 2002 11:27
10 lines
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
#251
Author: Ogryzek
Date: Tue, 10 Dec 2002 15:58
47 lines
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