2017-12-23 27 views
0

SQLite3을 사용하고 있습니다.SQLITE3 - 루프가있는 열에 데이터 넣기

내 SQL 테이블에는 50 개의 열이있는 테이블이 있으며, 각 열에 My_List의 각 값을 입력하고 싶습니다.이 값은 50 개의 요소가 있습니다.

내 테이블에 데이터를 넣으려면 파이썬에서 루프를 코딩하는 방법이 있습니까?

import sqlite3 
conn = sqlite3.connect("testdatabase.db") 
c.execute('''CREATE TABLE mytable (Column1 text, Column2 text, Column3, 
text) ''') 
c.execute('''INSERT INTO mytable (Column1, Column2, Column3) VALUES (?, 
?, ?)''', (myliste[0], myliste[1], myliste[2]) 

conn.commit() 

매우 감사 : 내가 대신 50 세 변수

내 현재 코드는 ... 그것을 찾기 위해 시도했지만 아무것도하지 않았다.

Lcs

+0

당신이 (2 ~ 3 열까지 확장 할 수있다)처럼 입력이 모습 보여 주시겠습니까 무엇 지금까지 시도했다. StackOverflow 사용자는 질문이 명확하고 자신의 문제를 해결하려는 노력을 보여 주면 도움이 될 것입니다. –

답변

0

나는 무엇을 하려는지보고 있습니다. 당신은 거의 그것을 가지고 있습니다. 당신이 가지고있는 것은 한 행의 데이터를 쓰는 것입니다. 단지 루프에 그것을 넣어 당신은 전체 테이블을 작성할 수 있습니다

가, 50 열을 만들 이미 열 목록이있는 경우, 자신과 아래의 변수 columns를 교체하려면

import sqlite3 

conn = sqlite3.connect("testdatabase.db") 
conn.execute("CREATE TABLE mytable (Column1 text, Column2 text, Column3 text)") 

mytable = [ 
    ('a', 'b', 'c'), 
    ('d', 'e', 'f'), 
] 

for myliste in mytable: 
    conn.execute("""INSERT INTO 
      mytable (Column1, Column2, Column3) 
      VALUES (?, ?, ?)""", 
     myliste) 

conn.commit() 

업데이트 :

conn = sqlite3.connect("testdatabase.db") 
conn.execute('DROP TABLE IF EXISTS mytable') 

# Create ['Column1', 'Column2', ..., 'Column50'] 
columns = ['Column%d' % n for n in range(1, 51)] 

# Create 'Column1 TEXT, ... Column50 TEXT' 
columns_declaration = ', '.join('%s TEXT' % c for c in columns) 

conn.execute("CREATE TABLE mytable (%s)" % columns_declaration) 

conn.commit() 

+0

대단히 감사합니다. 하지만 50 열과 같이하면 어떻게 할 수 있습니까? ... mytable (Column1, Column2 ....) 등등을 써야합니까? Column50까지 계속? – Skyly83

+0

어딘가에 열 이름 목록이 있습니까? –

+0

예, 너무 오래 걸릴 수 있기 때문에 이전 코드에 전체 코드를 넣지는 않았지만 코드를 입력하기 직전에 각 50 개의 열을 입력했습니다. 테이블의 열 번호를 참조 할 수 있습니까? 예를 들어 python의 목록처럼 : mytable [3]은 세 번째 열을 가져옵니다. – Skyly83

0

은 내가 대신 행에 의해 행이 정말 느리기 때문에 insert into를 사용하는 bulk insert을 사용하여 다음 CSV 파일을 생성하는 것이 좋습니다이 post에서 비슷한 질문에 대한 답변, 그리고 생에 당신은 열이나 행의 수를 걱정할 필요가 없습니다. 나는 SQL 서버를 위해 그것을했지만 꽤 sqlite에서 작동합니다.

0

는 SQL에서는 모든 컬럼이 추가 및 값 테이블 동일한 순서로 정렬 모든 열에 대한 데이터가 포함되는 가정 INSERT INTO에 지정된 컬럼을 생략 할 수있다. 그런 다음

동적 paramterization의 자리를 구축 고려 : 당신을 당신이 출력 모양을하고 싶은

placeholders = ', '.join(['?'] * 50) 

c.execute('''INSERT INTO mytable VALUES ({})'''.format(placeholders), mylist)