2014-09-04 3 views
2

나는이 문장에서 숫자 값을 반환하는 것을 시도하고있다 :파이썬 SQLite는 반환 값

c = db.execute("""SELECT *, rowid FROM members WHERE barcode = '%s' AND debit > 0 LIMIT 50""" % (s,)) 

하지만 반환 값으로이 얻을 :

sqlite3.Cursor object at 0xb6cb2720 

나는이 커서 오브젝트에 무엇을해야 결과를 얻으려면?

+0

'c '를 열거 해 보셨습니까? 'for row in c : ... ' – cdhowie

+2

'SELECT 문 실행 후 데이터를 검색하려면, 커서를 반복자로 취급하거나, 커서의 fetchone() 메소드를 호출하여 일치하는 단일 행을 검색하거나, fetchall() 일치하는 행의 목록을 얻으려고합니다. – roippi

답변

2

이 시도 : 내 문제의

for row in c: 
    print row['rowid'] 
+0

'c.fetchall()'대신'c'를 직접 열거하면 전체 결과 집합이 메모리에 한 번에로드되지 않고 각 행이로드되므로 메모리가 덜 필요합니다. 한 번에 하나씩, 다음 번에 버려집니다. – cdhowie

+0

업데이트 됨. 팁 고마워. 그래서 나는 SO에 대한 질문에 답하는 것을 좋아합니다. 내 사고 방식은 유효한지 또는 그렇지 않은지간에 어떤 것을 배웁니다. – chishaku

+0

@cdhowie 실제로 SQLite는 반드시 전체 결과 집합을 반환하지는 않지만, 디스크의 트랜잭션 로그에서 다음 집합을 반환하기 전에 반드시 일부를 메모리에 버퍼링합니다 (in-mem DB가 아닌 경우) ... 그렇지만 여전히 확실합니다 결과를'list' 또는'.fetchall'ing하는 것보다 효율적입니다. –

0

하나, 내가 원하는 데이터를 얻을 잘못된 SQL 쿼리를 사용 하였다. 참조 : 다음 응답을 얻을 것

c = db.execute("""SELECT "debit" FROM "members" WHERE "barcode" = '%s' LIMIT 1""" % (s,)) 

: 내가 필요한 것을

(0,) 

이었다. 이제 실제로 그것을 비교하는 방법을 알아내는 방법 - "c가 (0,)과 같지 않다면 '십자가'를 인쇄하십시오."

많은 도움을 주셔서 감사합니다!