Article View: pl.comp.lang.python
Article #27148Re: Formatowanie napisów w nowym stylu.
From: William Bonawentura
Date: Thu, 07 Jan 2010 09:32
Date: Thu, 07 Jan 2010 09:32
38 lines
3219 bytes
3219 bytes
Użytkownik "królewna" <krolewna@ee.pl> napisał w wiadomości
news:hi1l9s$3et$1@achot.icm.edu.pl...
> Dzięki kochani, jak zawsze można na Was liczyć. Możecie mi jeszcze
> powiedzieć czemu nazwa tabeli nie powinna być przekazywana jako parametr
> jeśli źródło pochodzenia jej nazwy jest zaufane? Bo rozumiem, że to ze
> względów bezpieczeństwa (aby przypadkiem ktoś nie odczytał sobie danych z
> innej tabeli niż powinien). Czy może jeszcze jakiś inny aspekt, o którym
> nie wiem?
Idźmy krok dalej i zadajmy sobie pytanie, dlaczego słowa kluczowe nie
miałyby byc parametryzowane, np.;
polecenie = 'INSERT INTO'
cur.execute("""%s %s (10, %%s, 3)""" % (polecenia, nazwa_tabeli, (pick,))
Dochodzimy w tym miejscu do absurdu, gdzie "przygotowanie" zapytania nic nie
daje bo wszystko jest dynamiczne. A tu chodzi o rozdzielenie polecenia SQL
(którego część stanowią nazwy tabel i kolumn) i danych. Ta logika doskonale
wyznacza też zakres poprawności posługiwania się SQLem. Jeśli mamy potrzebę
zmieniania nazw kolumn w pewnym punkcie programu, to znak, że mamy źle
wymyśloną bazę, lub piszemy ORMa a nie aplikację bazodanową.
Co więcej, w przypadku polecenia INSERT, pełna składnia execute to:
data = [
( 'first bar', 'first other' ),
( second bar', 'second other' ),
]
cur.execute("""INSERT INTO table_foo (column_bar, column_other) VALUES (%s,
%s)""", data )
Czyli motor bazy danych przygotowuje się jeden raz do operacji wstawiania,
tworzy na ten cel jakiś bufor, uruchamia triggery BEFORE itd. po czym
otrzymuje od klienta paczkę danych i wszystkie wstawia. Gdyby nazwa kolumny
lub tabeli mogła być tu dynamiczna, efekt "masowości" INSERTA lub UPDATE
diabli by wzieli.
Technical Details
Message-ID:
<hi49no$1qp5$1@news2.ipartners.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news2.ipartners.pl!not-for-mailReferences:
<hhvlil$cso$1@achot.icm.edu.pl> <e40b5499-a692-4d1d-bd6d-8dd80f5ae900@c3g2000yqd.googlegroups.com> <hhvp29$gld$1@achot.icm.edu.pl> <slrnhk6q4e.6d2.beorn@pino.cyberdeck.pl> <hhvrc6$6fe$1@news.onet.pl> <slrnhk70lt.6v8.beorn@pino.cyberdeck.pl> <hi00a7$l52$1@news.onet.pl> <0c4a8a92-fcab-4c8f-8e51-6a865b220086@h9g2000yqa.googlegroups.com> <op.u521gxj6fvx12t@jerzozwiesz.home.aster.pl> <178f9ae7-e594-4ac4-94b6-81afaae72b7a@35g2000yqa.googlegroups.com> <op.u52451irfvx12t@jerzozwiesz.home.aster.pl> <hi1l9s$3et$1@achot.icm.edu.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news2.ipartners.pl!not-for-mail From: "William Bonawentura" <news@ipartners.pl> Newsgroups: pl.comp.lang.python Subject: Re: Formatowanie napisów w nowym stylu. Date: Thu, 7 Jan 2010 10:32:40 +0100 Organization: GTS Energis Lines: 39 Message-ID: <hi49no$1qp5$1@news2.ipartners.pl> References: <hhvlil$cso$1@achot.icm.edu.pl> <e40b5499-a692-4d1d-bd6d-8dd80f5ae900@c3g2000yqd.googlegroups.com> <hhvp29$gld$1@achot.icm.edu.pl> <slrnhk6q4e.6d2.beorn@pino.cyberdeck.pl> <hhvrc6$6fe$1@news.onet.pl> <slrnhk70lt.6v8.beorn@pino.cyberdeck.pl> <hi00a7$l52$1@news.onet.pl> <0c4a8a92-fcab-4c8f-8e51-6a865b220086@h9g2000yqa.googlegroups.com> <op.u521gxj6fvx12t@jerzozwiesz.home.aster.pl> <178f9ae7-e594-4ac4-94b6-81afaae72b7a@35g2000yqa.googlegroups.com> <op.u52451irfvx12t@jerzozwiesz.home.aster.pl> <hi1l9s$3et$1@achot.icm.edu.pl> NNTP-Posting-Host: nat-coig130.coig.katowice.pl Mime-Version: 1.0 X-Trace: news2.ipartners.pl 1262856760 60197 195.39.217.130 (7 Jan 2010 09:32:40 GMT) X-Complaints-To: abuse@ipartners.pl NNTP-Posting-Date: 7 Jan 2010 09:32:40 GMT In-Reply-To: <hi1l9s$3et$1@achot.icm.edu.pl> X-Priority: 3 X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6002.18005 X-Newsreader: Microsoft Windows Mail 6.0.6002.18005 X-MSMail-Priority: Normal Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit