2016-06-20 11 views
2

Ich habe eine Postgres-Datenbank, die ich über Python über die psycopg2-Bibliothek zugreifen. Die Tabelle I in einfügen bin versucht, sieht wie folgt aus:psycopg2 kann nicht in bestimmte Spalten eingefügt werden

              Table "public.programmes" 
    Column |   Type    |      Modifiers      | Storage | Stats target | Description 
-------------+-----------------------------+---------------------------------------------------------+----------+--------------+------------- 
id   | bigint      | not null default nextval('programmes_id_seq'::regclass) | plain |    | 
title  | character varying   | not null            | extended |    | 
start  | timestamp without time zone | not null            | plain |    | 
end   | timestamp without time zone | not null            | plain |    | 
description | character varying   | not null            | extended |    | 
genre  | character varying   | not null            | extended |    | 
edited  | boolean      | not null            | plain |    | 

wo die id Spalte als bigserial-autoincrement neue Einträge erstellt wurde.

Da die Spalte id automatisch inkrementiert wird, versuche ich nur Daten zu den verbleibenden Feldern einzufügen. Ich erstelle die Daten als Liste und versuchen, es wie folgt einzufügen:

def main(): 
    postConn = psycopg2.connect("dbname=TEST host=127.0.0.1 user=user") 
    postCur = postConn.cursor() 

    prog_data = form_programme_data() 
    #prog_data = ['The Next Step', '2016-05-29T10:20:00', '2016-05-29T10:45:00', "2/34. My Boyfriend's Back: Reality-style drama following a group of dancers. A-Troupe meets their new choreographer and votes for open auditions for the nationals team. Also in HD. [S]", 'Lifestyle', False] 

    postCur.execute("""INSERT INTO programmes(title, start, end, description, genre, edited) VALUES (%s, %s, %s, %s, %s, %s);""", prog_data) 

und ich erhalte diesen Fehler ausgelöst:

Traceback (most recent call last): 
File "convert_db.py", line 58, in <module> 
main() 
File "convert_db.py", line 32, in main 
postCur.execute("""INSERT INTO programmes(title, start, end, description, genre, edited) VALUES (%s, %s, %s, %s, %s, %s);""", prog_data) 
psycopg2.ProgrammingError: syntax error at or near "end" 
LINE 1: INSERT INTO programmes(title, start, end, description, genre... 
              ^

Wenn ich ohne Angabe der Spaltennamen einzufügen versuchen, sie erwartet ein Wert für die id die ich nicht anfassen kann. Es beschwert sich nicht über die ersten zwei angebotenen Spaltennamen, aber nicht end aus irgendeinem Grund.

Jede Hilfe wird geschätzt.

Antwort

2

Anscheinend ist end ein key word in PostgreSQL. Sie müssen es angeben, damit es als ein Bezeichner interpretiert wird:

postCur.execute("""INSERT INTO programmes 
    (title, start, "end", description, genre, edited) 
    VALUES (%s, %s, %s, %s, %s, %s);""", prog_data) 
+0

Danke. Sie und advance512 hatten recht, als "Ende" ein Schlüsselwort war und ich habe Zitate hinzugefügt und es hat wie beabsichtigt funktioniert! Noch einmal vielen Dank. – Shiri

+0

Akzeptieren Sie die Antwort, wenn es für Sie funktioniert, wäre dankbar :) – advance512

1

Ich bin mir ziemlich sicher, dass end ein reserviertes Schlüsselwort in Postgres ist. Versuchen Sie, den Spaltennamen in einen anderen Namen zu ändern - das wird das Problem definitiv lösen. Alternativ die faule Lösung könnte sein, Ihren Code zu ändern:

postCur.execute("""INSERT INTO programmes('title', 'start', 'end', 'description', 'genre', 'edited') VALUES (%s, %s, %s, %s, %s, %s);""", prog_data) 

Sehen Sie, wenn es Ihr Problem löst und lassen Sie uns wissen.

Verwandte Themen