2017-12-17 17 views
1

방금 ​​Python을 시작했고 이미 SQL의 기초를 알고 있습니다. 이 코드에서는 테이블을 조인하고 파이썬을 테스트하려고하지만 해결할 수없는 두 가지 문제가 있습니다. 문제 1) 코드를 실행할 때마다 데이터가 새로 입력됩니다. 나는 왜 이런 일이 일어나고 있는지 이해하지만 중복 된 데이터를 삭제하는 코드가 필요하다. 누군가 가능한 해결책을 쓸 수 있습니까? 문제 2) JOIN 쿼리를 사용하여 first_name 및 작업을 선택하려고하면 first_name이 알 수없는 열임을 알리는 오류 메시지가 나타납니다 ??? 이 내 코드입니다 :Python으로 SQL 코드를 삭제하고 JOIN에서 선택하기

import sqlite3 
conn = sqlite3.connect('learning_sql') 
c = conn.cursor() 

def create_table1(): 
    c.execute('CREATE TABLE IF NOT EXISTS family (first_name TEXT, last_name TEXT, date_of_birth TEXT, age INTEGER)') 

def create_table2(): 
    c.execute("CREATE TABLE IF NOT EXISTS jobs (first_name TEXT, last_name TEXT, job TEXT)") 

def data_entry1(): 
    c.execute("INSERT INTO family VALUES ('Sven','Niles','31-03-2001', 16)") 
    c.execute("INSERT INTO family VALUES ('Max','Niles','10-12-2005', 12)") 
    c.execute("INSERT INTO family VALUES ('David','Niles','18-01-1971', 46)") 
    c.execute("INSERT INTO family VALUES ('Katja', 'Niles', '16-08-1978', 39)") 

def data_entry2(): 
    c.execute("INSERT INTO jobs VALUES ('Sven', 'Niles', 'NO')") 
    c.execute("INSERT INTO jobs VALUES ('Max', 'Niles', 'NO')") 
    c.execute("INSERT INTO jobs VALUES ('David', 'Niles', 'YES')") 
    c.execute("INSERT INTO jobs VALUES ('Katja', 'Niles', 'YES')") 

def read_from_db(): 
    c.execute("SELECT first_name, job FROM family JOIN jobs ON jobs.first_name = family.first_name WHERE job = 'YES'") 
    data = c.fetchall() 
    print (data) 
    for row in data: 
     print (row) 

create_table1() 
create_table2() 
data_entry1() 
data_entry2() 
read_from_db() 

이 내가 경험하고있는 오류 메시지는 다음과 같습니다

Traceback (most recent call last): 
    File "/home/pi/Desktop/praciticing_sql.py", line 34, in <module> 
    read_from_db() 
    File "/home/pi/Desktop/praciticing_sql.py", line 24, in read_from_db 
    c.execute("SELECT first_name, job FROM family JOIN jobs ON jobs.first_name = family.first_name WHERE job = 'YES'") 
sqlite3.OperationalError: ambiguous column name: first_name 
+0

당신이 _exact_ 오류를 포함하시기 바랍니다 수 : 대신 사용하여 가입하면 , 데이터베이스는 자동으로 중복 열을 제거 할 것인가? –

+0

역 추적 (마지막으로 가장 최근 통화) : 파일 "/home/pi/Desktop/praciticing_sql.py", 라인 (34), read_from_db에서() 파일 "/home/pi/Desktop/praciticing_sql.py", 라인 (24) , in read_from_db sqlite3.OperationalError : 모호한 열 이름 : first_name –

+0

에 오신 것을 환영합니다! 여기에 표시된 것처럼 정확한 오류가 중요합니다. "모호한"은 알려지지 않은 것과 매우 다릅니다. 게시물의 본문 (댓글이 아닌)에 항상 정확한 오류를 제공하십시오. –

답변

1

당신은 필드 "이름"과의 쿼리에 두 개의 테이블이있다. 조회에서 참조 할 조회를 지정해야합니다.

이미 NOT이있는 경우 CREATE TABLE을 사용하는

0

SELECT jobs.first_name, 가족의 직업과 당신의 선택 라인을 .... 교체하지만, 포장 쉬울 수 있습니다 네 만들기/데이터베이스 내용에 대한 검사에 삽입 함수 :

if not table_exists(conn, "family"): 
    conn.execute("BEGIN") 
    with conn: 
     create_table1() 
     create_table2() 
     data_entry1() 
     data_entry2() 

read_from_db() 

이 두 테이블에 발생하기 때문에 first_name 모호 컬럼 이름.

c.execute("""SELECT first_name, job 
      FROM family 
      JOIN jobs USING (first_name) 
      WHERE job = 'YES'""")