2016-10-19 251 views
0

數據插入到Postgres的SQL我想讀一個CSV文件與Python 數據插入到Postgres的SQL,但我有這些錯誤:閱讀CSV到與Python

cursor.execute(passdata) 
    psycopg2.IntegrityError: duplicate key value violates unique constraint "prk_constraint_project" 
    DETAIL: Key (project_code)=(%s) already exists. 

我的代碼是:

clinicalCSVINSERT = open(clinicalname, 'r') 
    reader = csv.reader(clinicalCSVINSERT, delimiter='\t') 
    passdata = "INSERT INTO project (project_code, program_name) VALUES ('%s', '%s')"; 
    cursor.execute(passdata) 
    conn.commit()` 

這個錯誤是什麼意思? 是否有可能有一個工作腳本?

+0

http://stackoverflow.com/questions/1109061/insert-on-duplicate-update-in-postgresql – vks

+0

我的CSV包含這樣的數據: ' file_uuid \t 1B3DB121-B766-486D-AB7D-65AB646CE5AC batch_number \t 304.63.0 project_code \t TCGA disease_code \t ACC day_of_dcc_upload month_of_dcc_upload year_of_dcc_upload (數據是標籤單獨的值) ' –

回答

2

你的代碼的直接問題是你試圖包含文字%s。既然你可能不止一次運行它,你已經在這個獨特的列中有了一個文字%s,因此是例外。

需要將包含在迭代器中的值作爲參數傳遞給execute方法。 %s只是一個有價值的地方。

passdata = """ 
    INSERT INTO project (project_code, program_name) 
    VALUES (%s, %s) 
""" 
cursor.execute(passdata, (the_project_code, the_program_name)) 

不要引用%s。 Psycopg會在必要時做到這一點。

由於您的代碼不包含循環,它只會從csv插入一行。有一些模式可以插入整個文件。如果要求允許只使用copy_from這是更簡單和更快。

+0

感謝您的快速回答, –

+0

我的CSV有2列; –

+0

第一個包含幾個數據,包括project_code和program_name,第二個列包含對應於第一列的數據 –