2014-04-30 1 views
-1

나는이 코드를 파이썬으로 작성했다.이 코드는 기본적으로 SQLite3 데이터베이스를 열고 'contact'테이블의 각 행을 살펴본 다음 각각의 'id' '사용자'테이블에서 'id'와 일치합니다. 내 문제는 첫 번째 출력 및 모든 행을 반복하지 않는 것입니다.Python과 SQLite3 두 테이블에서 선택하기

import sqlite3 

conn = sqlite3.connect('sqlite3.db') 

cursor = conn.cursor() 
cursor2 = conn.cursor() 
cursor3 = conn.cursor() 

text_file = open("Output.txt", "w"); 
try: 
    cursor.execute("SELECT Id, address FROM contact;") # Get address details by ID 
    for row in cursor: 
     ID = row[0] 
     address= row[1] 

     cursor2.execute("SELECT name FROM Users WHERE id= " + str(ID) + ";") # Get users's name by ID 
     row2 = cursor2.fetchone() 
     sendername = row2[0] 

     text_file.write(firstname, lastname, address); 


finally: 
    conn.close() 

의견이 있으시면, 저는 매우 Python에 익숙합니다.

+1

데이터베이스에 쿼리에 참여하도록 요청하지 않는 이유는 무엇입니까? –

+0

그리고'file.write()'는 단 하나의 인자를 취합니다; 대신 출력을 * one * 문자열 (줄 바꿈 포함)으로 포맷하고 싶을 것이다. –

+0

왜'firstname'과'lastname'을 쓰려고합니까? 그러나'Users' 테이블 만'sendername'을 제공합니까? –

답변

3

당신은 대신 가입 할 데이터베이스를 요청할 수 있습니다 :

cursor.execute("""\ 
    SELECT u.name, c.address 
    FROM contact c 
    INNER JOIN Users u ON u.id = c.Id 
    """) 
with open('Output.txt', 'w') as outfh: 
    for name, address in cursor: 
     outfh.write('{} {}\n'.format(name, address) 

INNER JOIN은 행을 선택하는 SQLite는 지시하는에 실제 경기가 id 열. contact 테이블에서 id 열을 외래 키로 표시 한 경우 NATURAL INNER JOIN도 사용할 수 있으며 ON 절을 생략 할 수 있습니다.

1

나는 당신을 이해한다면 :

cursor.execute("SELECT Users.name, contact.address FROM Users, contact WHERE contact.Id = Users.id;") 
for row in cursor: 
    name= row[0] 
    address= row[1] 
    text_file.write(name+" "+address) 
+0

이제는 한 사용자 ID의 모든 행을 출력하지만 다른 사용자의 행은 출력하지 않습니다. – user826436

관련 문제