🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Python i MySQL BLOB

#27142
From: Łukasz Rekucki
Date: Tue, 05 Jan 2010 18:44
41 lines
3207 bytes
On Jan 5, 7:27 pm, Jacek Czerwinski <x...@y.z.pl> wrote:
> Daniel Mróz pisze:
>
> > On 05.01.2010, Jacek Czerwinski <x...@y.z.pl> wrote:
> >>>>> pick = pickle.dumps("alamakota")
> >>>>> cur.execute("INSERT INTO test VALUES(10, %s, 3);", (pick,))
> >>>> A gdybym chciała zrobić coś w stylu:
>
> >>>> cur.execute("INSERT INTO %s VALUES(10, %s, 3);", (nazwa_tabeli,pick))
>
> >>>> to ten sposób znowu zawodzi i pojawia się błąd podobny do poprzedniego.
> >>> cur.execute("""INSERT INTO %s VALUES(10, %%s, 3)""" % nazwa_tabeli, (pick,))
>
> >>> nie zadziała?
> >> Na dwoje babka wróżyła. W surowych SQL-ach odpowiednik czyli podać
> >> argumenty i prepare bywa zakazane (podobno ze względu na niewykonalnośc
> >> prepare). Ale tak sobie gadam.
> > Nie rozumiem o co chodzi w powyższej wypowiedzi (nie piłem jeszcze kawy),
>
> Zasłyszane, stare, nie będę się upierał, i w ogóle skleroza, ale jakoby
> W TYM MIEJSCU (tj nazwy tabeli) nie można było parametryzować.

No właśnie nie można, więc to nie działa:
cur.execute("INSERT INTO %s VALUES(10, %s, 3);", (nazwa_tabeli,pick))

Ale tutaj:
cur.execute("""INSERT INTO %s VALUES(10, %%s, 3)""" % nazwa_tabeli,
(pick,))

"nazwa_tabeli" nie jest parameterem zapytania, tylko wstawieniem
napisu do innego napisu - operacja zupełnie w żadnym stopniu nie
powiązana z żadną bazą danych. Dla czytelności można rozbić na 2-wie
linijki:

query = """INSERT INTO %s VALUES(10, %%s, 3)""" % nazwa_tabeli
cur.execute(query, (pick,))

Albo żeby się nie myliło, korzystając z nowego formatowania:
query = """INSERT INTO {table:s} VALUES(10, %s, 3)""".format(table=
nazwa_tabeli)
cur.execute(query, (pick,))
Technical Details
Message-ID: <0c4a8a92-fcab-4c8f-8e51-6a865b220086@h9g2000yqa.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!feed.news.interia.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border2.nntp.dca.giganews.com!nntp.giganews.com!postnews.google.com!h9g2000yqa.googlegroups.com!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>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!feed.news.interia.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border2.nntp.dca.giganews.com!nntp.giganews.com!postnews.google.com!h9g2000yqa.googlegroups.com!not-for-mail
From: Łukasz Rekucki <lrekucki@gmail.com>
Newsgroups: pl.comp.lang.python
Subject: Re: Python i MySQL BLOB
Date: Tue, 5 Jan 2010 10:44:15 -0800 (PST)
Organization: http://groups.google.com
Lines: 49
Message-ID: <0c4a8a92-fcab-4c8f-8e51-6a865b220086@h9g2000yqa.googlegroups.com>
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>
NNTP-Posting-Host: 212.76.62.207
Mime-Version: 1.0
X-Trace: posting.google.com 1262717055 30831 127.0.0.1 (5 Jan 2010 18:44:15 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Tue, 5 Jan 2010 18:44:15 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: h9g2000yqa.googlegroups.com; posting-host=212.76.62.207;  posting-account=5fpXZwoAAADF-CUdCuJ-FpYxG8__-wRx
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US)  AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.43 Safari/532.5,gzip(gfe),gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit