2013-07-08 2 views
0

url/JSON에서 데이터를 가져와 디코딩하고 JSON의 요소를 sqlite 테이블로 보냅니다.Python을 통해 JSON에 JSON : REPLACE INTO 동일한 행을 인식하지 못합니다.

JSON을 매 순간마다 당겨서 때로는 동일한 JSON (아직 새로 고치지 않은)을 가져옵니다. 그러나 동일한 데이터를 두 번 이상 테이블에 입력하고 싶지 않습니다. 이 문제에 대한 해결책은 도움이됩니다.

제 생각에 JSON의 'time executed'요소를 sqlite로 전달되는 필드 중 하나로 포함하기 만하면됩니다. 따라서 INSERT 대신 REPLACE를 사용하면 JSON에 새로운 타임 스탬프가있는 경우에만 기존 SQL 테이블에 새 행을 삽입합니다. 여기에 의미가 있습니다 :

json = json.loads(y) 
jsontime = json['executionTime'] 

db = sqlite3.connect('database.db') 
c = db.cursor() 


c.execute("""CREATE TABLE IF NOT EXISTS cbdata (
    cb_id INTEGER PRIMARY KEY ASC, 
    tjson DATE, 
    id INTEGER, 
    Name TEXT, 
    Age INTEGER);""") 

for item in json['List']: 
    i1 = item["id"] 
    i2 = item["Name"] 
    i3 = item["Age"] 
    iall = [jsontime, i1, i2, i3] 
    c.execute("REPLACE into cbdata values(NULL,?,?,?,?)", iall) 

그러나 중복 행이 입력되는 것을 방지하지 못합니다. 스크립트가 실행될 때마다 테이블에 새로운 항목 (중복되는 경우에도)이 삽입됩니다.

생각하십니까? 다른 솔루션? 친절하게 감사드립니다.

답변

1

REPLACE 쿼리가 올바르게 작동하려면 행을 고유하게 식별 할 수있는 속성을 지정해야합니다. 즉, UNIQUE 제약 조건을 테이블에 추가해야합니다. (귀하의 경우 db는 4 개의 비 기본 키 열 중 어느 것이 행에 고유하도록 의도되었는지 알 수있는 방법이 없습니다.) 따라서 타임 스탬프에 고유성 제약 조건을 추가해야합니다. 하나의 id, Name, Age 주어진 시간 소인 튜플에 다중 열 고유성 제약 조건을 추가하십시오.

+0

감사합니다. 유일성 제약 조건으로 작동 할 수있는 두 개의 필드를 함께 해시하는 필드 HASH가 있다고 가정 해보십시오. 바꾸기 구문은 어떻게 작동합니까? – user1893148

+0

그것을 발견했습니다 --- 도움을 주셔서 감사합니다. – user1893148

관련 문제