2016-06-20 8 views
2

私はpsycopg2ライブラリを使用してPython経由でアクセスしているpostgresデータベースを持っています。 id列がbigserialautoincrementに新しいエントリとして作成されたpsycopg2は特定の列に挿入できません

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

:テーブルには、私はこのようなルックスに挿入しようとしています。

id列は自動インクリメントされるので、残りのフィールドに関するデータを挿入しようとします。私は、リストなどのデータを作成し、このようにそれを挿入しよう:

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) 

そして私は、このエラーがスローされます:

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

私は、列名を指定せずに挿入しようとする場合には、それが期待を私が触れることができないidの値。提供された最初の2つのカラム名については不平を言っていませんが何らかの理由でendが好きではありません。

何か助けていただければ幸いです。

答えて

2

明らかに、endはPostgreSQLではkey wordです。識別子として解釈されるように引用する必要があります。

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

ありがとう。あなたとadvance512はキーワード「end」について正しいと私は引用符を追加して、意図したとおりに働いています!もう一度ありがとう。 – Shiri

+0

答えを受け入れる、それはあなたのために働いた場合、感謝される:) – advance512

1

endはPostgresの予約キーワードです。列名を別の名前に変更してみてください。それは確実に問題を解決します。

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

それはあなたの問題を解決するかどうかを参照してください、私たちに知らせてください:また、怠惰なソリューションあなたのコードを変更することがあります。

関連する問題