2016-06-22 4 views
0

필자가 작성한 python 스크립트를 사용하여 일부 csv 파일의 데이터를 SQLite3 데이터베이스에 삽입합니다. 내가 스크립트를 실행하면 데이터베이스에 첫 번째 행을 삽입하지만, 두 번째 인세 노력이 오류를 제공합니다SQLite3 열이 고유하지 않습니다.

sqlite3.IntegrityError: columns column_name1, column_name2 are not unique. 

그것은 사실이다 COLUMN_NAME1 및 COLUMN_NAME2의 값의 처음 두 행에서 동일 CSV 파일 그러나이 오류에 대한 읽기는 하나 이상의 데이터베이스 열에 대한 고유성 제약 조건을 나타 내기 때문에 조금 이상하게 보입니다. SQLite Expert Personal을 사용하여 데이터베이스 세부 정보를 확인했으며 현재 테이블에 고유성 제약 조건을 표시하지 않았습니다. 또한 입력 할 필드 중 어느 것도 기본 키를 지정하지 않습니다. 그것은 데이터베이스가 자동으로 할당하는 것 같습니다. 이 오류의 원인은 무엇입니까? 감사.

import sqlite3 
import csv 

if __name__ == '__main__' : 

conn = sqlite3.connect('ts_database.sqlite3') 
c = conn.cursor() 

fileName = "file_name.csv" 
f = open(fileName) 
csv_f = csv.reader(f) 

for row in csv_f: 
    command = "INSERT INTO table_name(column_name1, column_name2, column_name3)" 
    command += " VALUES (%s, '%s', %s);" % (row[0],row[1],row[2]) 
    print command 
    c.execute(command) 
    conn.commit() 

f.close() 
+0

왜이 게시물을 투표에 넣었습니까? 나는 적절한 연구 배경을 보여 주었고 문제에 대한 명확한 설명을 가지고 있다고 생각한다. 확실히 내 코드를 복사하여 붙여 넣기하지 않고 "이게 뭐가 잘못 되었나요?"라고 물었습니다. –

답변

2

SQLite가 IntegrityError 오류를보고하는 경우이 두 열에 PRIMARY KEY 또는 UNIQUE KEY가 실제로있을 가능성이 높으며 존재하지 않을 때 실수라고 생각할 가능성이 큽니다. 데이터베이스의 동일한 인스턴스를 실제로보고 있는지 확인하십시오. 또한

하지 문자열 보간을 사용하여 SQL 문을 작성하려면 어떻게해야합니까. 위험하고 또한 정확하게하기가 어렵습니다 (필드 중 하나에 작은 따옴표가 있다고 생각하면 알 수 있습니다). SQLite에서 매개 변수화 된 구문을 사용하는 것은 매우 간단합니다.

+0

고맙습니다. 나는 사용하고있는 SQLite GUI에 익숙하지 않다. 나는 그것에 대해 잘못된 결론을 내 렸습니다. –

0

오류는 INSERT INTO 문에 중복 된 열 이름이 원인 일 수 있습니다. 나는 그것이 오타라고 생각하고 INSERT INTO 문에서 column_name3을 의미했습니다.

+0

예. 사실, 난 그냥 개인 정보 보호를 위해 다음과 실제 열 이름을 대체했다. 실제로 이러한 라벨은 고유합니다. –

+0

나는 모호성 제거하기 위하여 그것을 다시 변경. –

관련 문제