2017-04-13 1 views
1

다른 질문을 보았습니다 만 일부는 대답을 모호하게 모호합니다. 내가 가진 열은 n 개의 열을 포함하는 6 개의 테이블을 가진 SQL 데이터베이스입니다. 파이썬 목록의 데이터가있는 테이블의 열을 삽입하지 않고 업데이트하려고합니다. 이것은 gbufids라고 불리는 목록이며 정수로 구성되어 있지만 각 항목은 [1,2,3]이 아닌 [0,1,2,3] 즉 투플에 포함되어 있지 않습니다. 변경할 테이블 이름을 버전이라고하고 열 이름을 ObjectID라고합니다. 내가 찾은 여러 가지 방법을 시도했지만, 끝내야 할 방식으로 일한 사람이 없었습니다. 나는 테이블 (버전)의 열 (ObjectID)을 업데이트하기 전에 목록의 각 항목을 튜플로 변환해야한다고 생각하는 다음을 사용했습니다. cur.executemany ('업데이트 버전은 ObjectID =?', ((val,) in val for gbufids)Python, sqlite3 및 목록을 사용하여 SQL 데이터베이스의 열을 업데이트하십시오.

다음은 커밋과 닫기입니다. 나는 UPDATE를 사용하고 있다면 WHERE 절이 필요하다는 것을 읽었지만 행에 대해서는 약간 혼란 스럽다. 나에게 행은 모든 셀이 연속적으로 표시되어 있지만 이것이 의미하는 바가 아닐 수 있습니다. 누군가가 내 DB, 테이블과 컬럼에 특정한 답을 제공 할 수있는 경우, 테이블의 모든 행이 값으로 업데이트되도록하는 WHERE 절없이

+0

SQL 테이블이 정렬되지 않은 있습니다. 행을 어떻게 식별해야합니까? –

+0

글쎄, 명시된 바와 같이 명명 된 테이블의 명명 된 열이 주어진 목록의 첫 번째 셀에서 지정된 목록의 각 항목이있는 명명 된 열의 마지막 셀로 채 웁니다. 원래 게시물에 주어진 정보로 어떻게 달성 할 수 있는지 말해 줄 수 있습니까? 내가 뭔가를 생략했다는 느낌이 들면, 아마 그것에 대해 확신이 없기 때문에 도움이나 설명으로 할 수 있습니다. 감사합니다 – EMJAY

+0

몇 가지 예제 데이터를 보여줍니다. 어떤 목록 엔트리가 어떤 테이블 행에 들어가는가? –

답변

0

UPDATE 문을 이해할 수있을 것이다 당신 executemany으로 넘어 가면 마지막으로 전달한 값으로 채워진 모든 행이 표시됩니다. 각 값을 특정 행과 일치 시키려면 명령문을 실행할 때마다 대체 할 행을 데이터베이스에 알리는 방법이 필요합니다. 업데이트 된 값 목록의 길이가 표의 행 수와 같고 목록의 순서가 단순한 SELECT * FROM table으로 표시되는 행의 순서와 같으면 가장 쉬운 방법은 테이블에 rowid의 목록을 가져올 것 :

rowids = [row[0] for row in cur.execute('SELECT rowid FROM Versions')] 

그런 다음 당신은 rowidsgbufids 짝과 executemany에 그것을 전달할 수 있습니다

cur.executemany('UPDATE Versions SET ObjectID=? WHERE rowid=?', zip(gbufids, rowids)) 
+0

대단히 고맙습니다. 필요한 코드를 제공하는 코드가 있습니다. 나는 새로운 질문이나 논평으로 그것을 게시 할 수 없었다. 내가 가지고있는 것을 다른 사람들이 사용할 수 있도록 공유하고 싶습니다. – EMJAY

+0

@EMJAY 자신의 질문에 대한 답변을 게시하는 데는 아무 문제가 없습니다. 다른 사람의 질문 일 경우처럼 대답으로 게시하십시오. – glibdud

+0

나는 시도했다. 그러나 나는 내가 여기에 처음 왔을 때 내가 덧붙인 이전의 대답으로 인해 답을 얻지 못할지도 모른다고 생각한다. 그들은 나를 괴롭 히고있다. 외관상으로는, 나는 체계가 그들을 유효한 것으로 인식 할 것이다 그래야 previious 응답을 편집 할 수있다. 일단 내가 해보면이 대답을 업데이트 할 것입니다. – EMJAY

관련 문제