🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
4 messages
4 total messages Started by curious Tue, 20 Aug 2013 16:38
psycopg2, bigint w tabeli
#28473
Author: curious
Date: Tue, 20 Aug 2013 16:38
13 lines
1978 bytes
Witam,
Wykonując operacje bazodanowe natknąłem się na problem, którego nie potrafię przeskoczyć. Z jednej tabeli pobieram interesujące mnie rekordy, gdzie kolumna 'obiekt' jest typu bigint. Następnie chcę usunąć z innej tabeli te rekordy, które nie zawierają się w pierwszej kwerendzie. Zapytanie sql wygląda następująco :
"DELETE FROM tab WHERE obiekt NOT IN %s" %(tuple(zbior),)"

Powyższy schemat działał poprawnie, gdy obiekt był integer, po przejściu na bigint rzuca błędem : 

psycopg2.ProgrammingError: syntax error at or near "L"
LINE 1: ...FROM tab WHERE obiekt NOT IN (-1, 366958314L, 3669535...

Problem jest związany z tym, że typ 'long' reprezentowany jest z literą 'L' na końcu. Przeszkadza to jednak w operowaniu na bazie danych. Jak to rozwiązać?

Pozdr.
Curious
Re: psycopg2, bigint w tabeli
#28474
Author: Jordan Szubert
Date: Tue, 20 Aug 2013 17:12
13 lines
1308 bytes
Dnia 20-08-2013 o 18:38:31 curious <grick207@gmail.com> napisał(a):

może zadziała to?

- "DELETE FROM tab WHERE obiekt NOT IN %s" %(tuple(zbior),)
+ "DELETE FROM tab WHERE obiekt NOT IN %s"  
%(str(tuple(zbior)).replace('L',''),)

a w ogóle, to parametry przekazuj jako parametry, a nie generuj ręcznie  
stringa, to kiepski pomysł

-- 
Jordan Szubert
Re: psycopg2, bigint w tabeli
#28475
Author: hubert depesz lubaczewski
Date: Tue, 20 Aug 2013 18:38
20 lines
1729 bytes
On 2013-08-20, curious <grick207@gmail.com> wrote:
> Witam,
> Wykonując operacje bazodanowe natknąłem się na problem, którego nie
> potrafię przeskoczyć. Z jednej tabeli pobieram interesujące mnie
> rekordy, gdzie kolumna 'obiekt' jest typu bigint. Następnie chcę
> usunąć z innej tabeli te rekordy, które nie zawierają się w pierwszej
> kwerendzie. Zapytanie sql wygląda następująco :
> "DELETE FROM tab WHERE obiekt NOT IN %s" %(tuple(zbior),)"

Nie tak, tylko:

"DELETE FROM tab WHERE obiekt NOT IN %s", (tuple(zbior),)"

I powinno zadziałać.

depesz

-- 
The best thing about modern society is how easy it is to avoid contact with it.
                                                             http://depesz.com/
Re: psycopg2, bigint w tabeli
#28476
Author: grick207
Date: Wed, 21 Aug 2013 19:46
45 lines
2280 bytes
W dniu wtorek, 20 sierpnia 2013 20:38:07 UTC+2 użytkownik hubert depesz lubaczewski napisał:
> On 2013-08-20, curious <grick2@gail.cm> wrote:
> 
> > Witam,
> 
> > Wykonując operacje bazodanowe natknąłem się na problem, którego nie
> 
> > potrafię przeskoczyć. Z jednej tabeli pobieram interesujące mnie
> 
> > rekordy, gdzie kolumna 'obiekt' jest typu bigint. Następnie chcę
> 
> > usunąć z innej tabeli te rekordy, które nie zawierają się w pierwszej
> 
> > kwerendzie. Zapytanie sql wygląda następująco :
> 
> > "DELETE FROM tab WHERE obiekt NOT IN %s" %(tuple(zbior),)"
> 
> 
> 
> Nie tak, tylko:
> 
> 
> 
> "DELETE FROM tab WHERE obiekt NOT IN %s", (tuple(zbior),)"
> 
> 
> 
> I powinno zadziałać.
> 
> 
> 
> depesz
> 
> 
> 
> -- 
> 
> The best thing about modern society is how easy it is to avoid contact with it.
> 
>                                                              http://depesz.com/

I oto właśnie chodziło ! Wielkie dzięki.
Pozdrawiam.

Curious.
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