2017-01-19 1 views
0

데이터베이스 sqlite3를 : 파이썬 내가 아래에있는 내 코드와 작은 프로그램을 가지고

def get_code(hex_pattern, database='./AndroidLockScreenRainbow.sqlite'): 
    try: 
     if os.path.exists(database): 
      with lite.connect(database) as db: 
       with db.cursor() as c: 
        c.execute("SELECT * FROM RainbowTable") 
        rows = c.fetchall() 
        for row in rows: 
         if row[0] == hex_pattern: 
          return row[1] 
     else: 
      raise lite.OperationalError("Database file not exists") 
    except lite.OperationalError: 
     print('Given SQL table not found!') 

코드는 프로그램이 다음과 같은 오류

에게 제공 :, C로) db.cursor (와 라인에 도달

with db.cursor() as c: 
AttributeError: __exit__ 

무엇이 잘못 되었나요?

+0

커서가 컨텍스트 관리자를 지원하지 않습니다. 당신은 그것과 함께'with'를 사용할 수 없습니다. –

답변

1

이 경우 with 문 (db.cursor())에 전달 된 표현식은 컨텍스트 관리자 개체를 반환해야합니다. 컨텍스트 관리자 개체는 __enter____exit__ 메서드를 모두 가져야합니다. (with 문은이 메서드를 사용하여 개체가 올바르게 정리되었는지 확인합니다.)

sqlite3 커서 개체는 이러한 메서드를 구현하지 않으므로 올바른 컨텍스트 관리자 메서드가 아니므로 현재 나타나는 오류 메시지입니다.

커서 주위에 자신 만의 컨텍스트 관리자를 작성할 수 있습니다. 직접 작성할 수도 있지만 대부분의 경우에는 필요하지 않습니다. db에 db.cursor()를 직접 할당하십시오.

c = db.cursor() 
관련 문제