2016-10-19 254 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,第二个列包含对应于第一列的数据 –