2016-06-10 9 views
1

Ich versuche, eine bedingte Aktualisierung auf meiner Website zu tun. Wenn ein Benutzer auf eine bestimmte Verknüpfung klickt, inkrementiert sich eine globale Zählervariable in der Datenbank.Bedingte Update-Anweisung in PSQL

Die Komplikation ist, dass, wenn die Anzahl der Zähler die Anzahl der Websites, die ich habe, ich den Zähler auf 1 zurückgehen muss. Ich habe eine Update-Anweisung für diese, aber es funktioniert nicht und ich kann nicht sehen, warum.

#Increment global counter, set it back to one when it exceeds the number of websites on record 
cursor.execute("UPDATE url_reroute_counter SET counter_num = "+ 
        " CASE"+ 
         " WHEN counter_num>(SELECT count(*) FROM url_reroute_targeturl)"+ 
          " THEN counter_num = 1"+ 
         " ELSE"+ 
          " counter_num = counter_num+1"+ 
        " END"+ 
        " WHERE name_of_counter = 'url_count'")` 

diesen Code Rennen wird mir die folgende Ausnahme:

django.db.utils.ProgrammingError: column "counter_num" is of type integer but expression is of type boolean 
    LINE 1: UPDATE url_reroute_counter SET counter_num = CASE WHEN coun... 
                 ^
    HINT: You will need to rewrite or cast the expression. 

ich zur Verwendung von hier nicht verwendet conditionals in jeder SQL-Sprache so jede hlep geschätzt wird.

+0

Ich denke, das geeignetere Tag ist postgresql – e4c5

Antwort

1

Ihre Abfrage sollte

cursor.execute("UPDATE url_reroute_counter SET counter_num = "+ 
       " CASE"+ 
        " WHEN counter_num>(SELECT count(*) FROM url_reroute_targeturl)"+ 
         " THEN 1"+ 
        " ELSE"+ 
         " counter_num+1"+ 
       " END"+ 
       " WHERE name_of_counter = 'url_count'")` 

Und BTW, in einem Multi-Line-Python-String wie folgt sein, brauchen Sie nicht diese alle + Zeichen. Das ist: https://stackoverflow.com/a/10660443/267540

+0

Ich fühle mich jetzt albern, das war ziemlich offensichtlich. – GreenGodot

+0

passiert jedem \ – e4c5