2017-02-06 1 views
0

그래서, 나는 다음과 같은 문제가 :pysqlite를 사용하여 SQLite에서 열을 업데이트하는 방법 테이블에서 다른 데이터로부터 조건부 값을 먼저 얻어야하는 곳은 어디입니까? 내 데이터베이스 업데이트 할 때

with con: 
    cur = con.cursor() 
    cur.execute('SELECT Column1 FROM MainTable') 
    while True row = cur.fetchone() 
    if row == None: 
     break 
for line in row: a, b, c= line.split('-') 
    print (b); 

주는 :

을 나는 기본적으로 세 가지로 분할해야하고 그래서 나는 다음과 같은 코드가 내 테이블에 열이 예를 들어 두 번째 열의 값. 하여 하단에 다음 그러나, 나는 그 값이 두 번째 열을 업데이트해야하고이를 위해 나는 추가 시도 :

cur.execute('UPDATE MainTable SET Col_2 = ?' WHERE Id = 1, (row, Id)) 

con.commit() 

그러나, 어떤 이유로이 잘 실행되고 있지 않습니다.

+0

은 아마 관련이없는 - 당신이 누락 where 절 당신의 갱신한다. 확인해주세요 – GurV

+0

긴 코드 행을 편집하기 시작한 다음 여기서 무슨 일이 일어나고 있는지 알지 못했습니다. while while true cur.fetchone == None Break; 정확한 표현을 볼 수 있도록 코드의 형식을 올바르게 지정하십시오. 당신이 발견 한 선 앞에 오는 일은 효과가 없습니다. – roganjosh

+0

안녕하세요, 당신이 옳고 코드의 첫 번째 줄이 잘못되어 조금 편집했습니다. –

답변

0

특정 행을 업데이트하려면 행을 식별 할 방법이 필요합니다. "ID"열이있는 것 같습니다. 따라서 분리하려는 문자열과 함께 읽으십시오.

SQL 문에는 이 없습니다.은 Python과 관련이 있습니다. 파이썬에서 당신이하는 일은 실행하기 위해 데이터베이스에 줄 문자열을 만드는 것입니다. (? 스타일 매개 변수를 사용하여 문자열 서식 문제 및 SQL 주입 공격을 피한다. 항상 값을 사용)

cur.execute('SELECT ID, Column1 FROM MainTable') 
for id, col1 in cur.fetchall(): 
    a, b, c = col1.split('-') 
    cur.execute('UPDATE MainTable SET ColA = ?, ColB = ?, ColC = ? WHERE ID = ?', 
       [a, b, c, id]) 
con.commit() 
관련 문제