2017-03-24 1 views
0

두 개의 sqlite 테이블에 각각 다른 항목과 수량이 들어 있습니다. 내가하고 싶은 일은 첫 번째 테이블을 반복하고, 첫 번째 테이블에서 수량을 선택하고, 항목 이름이 일치하는 두 번째 테이블에서 수량을 뺍니다. 말했듯파이썬에서 두 함수의 값을 빼는 방법

(표 1)

 
items | quantity 
---------- 
sugar | 50 
Pen | 10 
apple | 50 
berry | 1 

번째 테이블 (사용자 입력에 의해 생성) (표 2) 그래서

 
items |quantity 
---------- 
sugar |500 
Pen |5 
apple |8 
berry |1 

는, I는 표 1을 통해 루프 원하는 량을 얻을 설탕을 넣으십시오. 그런 다음 표 2를 반복하여 표 2의 설탕 양을 얻은 다음 최종적으로 값을 빼고 빼기가 수행 된 후에 값을 반환하십시오. 그런 다음 테이블 1의 다른 항목에 대해서도 동일한 작업이 수행됩니다 (루프)

예 : (500-50) - 설탕, (표 1에서 설탕의 수량 표 2에서 설탕의 양)을 사용 = 450 그 다음은 450 그래서 난 다른 기능

코드 예제에서 사용할 수있는 값을 반환합니다.

import sqlite3 

db = sqlite3.connect('example.db') 
#db.execute('create table Table1 (items text, quantity integer)') 
#db.execute('create table Table2 (items text, quantity integer)') 
a = 'Sugar' 
b = 50 
c = 500 
db.execute('insert into Table1 (items, quantity) values(?,?)',(a, b)) 
db.execute('insert into Table1 (items, quantity) values(?,?)',(a, c)) 
db.commit() 
db.close() 

def one(): 
    cursor = db.execute('select items from Table1') 
    for i in cursor.fetchall(): 
     return i 

def two(): 
    cursor1 = db.execute('select quantity from Table1 where items = ?',(one())) 
    for i in cursor1.fetchall(): 
     return i 

def three(): 
    cursor1 = db.execute('select quantity from Table2 where items = ?',(one())) 
    for i in cursor1.fetchall(): 
     return i 

def subtraction(): 
    t = three() - two() 
    return t 

내가 위의 코드 파일을 실행할 때 표시되는 오류 "C :/사용자/메가 마인드/문서/프로그래밍/Pycham 프로젝트/새 폴더/package.py"뺄셈에서, 라인 (22), t = 세() - two() TypeError : - : 'tuple'및 'tuple'에 대해 지원되지 않는 피연산자 유형

이 작업을보다 명확하게 수행 할 수있는 방법을 찾으십시오.

+0

가능성이 복제 : http://stackoverflow.com/questions/17418108/elegant-way-to-perform-tuple-arithmetic – meyer9

+0

[가능한 두 개의 다른 sqlite3 테이블에서 값을 빼는 방법] (http :// /stackoverflow.com/questions/42942389/how-to-subtract-values-from-two-different-sqlite3-tables-in-python) – GurV

+0

그것을 복제 해 주어서 죄송합니다. 이전의 설명을 잘 설명하지 못했습니다. 다시 물어. 사과해. – Peter

답변

0

당신은 단순히 두 개의 테이블을 조인하는 데이터베이스를 알 수 있습니다 :

cursor = db.execute('''SELECT items, Table2.quantity - Table1.quantity 
         FROM Table1 
         JOIN Table2 USING (items)''') 
for row in cursor: 
    name = row[0] 
    diff = row[1] 
    ... 
+0

고마워요,이 솔루션도 매력처럼 작동했습니다. – Peter

0

을 당신은 너무 열심히 만들고있어. SQL은 그 자체로 그렇게 당신에게 실버 플래터에 결과를 제공 할 수 있습니다 :

SELECT table1.items, table1.quantity - table2.quantity as remaining 
FROM table1 LEFT JOIN table2 ON table1.items = table2.items 

LEFT JOIN

table1의 모든 행이 결과에 나타납니다 보장합니다. 감소 된 카운트 만 원하면 JOIN을 사용하십시오.

+0

감사합니다. – Peter

+0

Peter, 옆에있는 큰 체크 표시를 클릭하여 가장 좋아하는 솔루션을 "수락"하십시오. – alexis

관련 문제