🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #27148

Re: Formatowanie napisów w nowym stylu.

#27148
From: William Bonawentura
Date: Thu, 07 Jan 2010 09:32
38 lines
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-mail
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>

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