2015년 8월 18일 화요일

[web2py] modules에서 db 객체 사용하기

Modules에 있는 python 코드에서 web2py의 db 객체 사용하기.


web2py의 modules에 구현해 놓은 코드에서 web2py의 db에 접근할 일이 생겨서 db객체가 어디서나 쓸 수 있는지 알고 그냥 바로 썼는데 동작을 못하더라...
처음엔 어디가 문제인지도 모르다가 수차례 디버그 로그를 찍어보다가 db가 문제인 것을 찾았다.

modules의 python코드에서 db등의 web2py 전역 변수들(request, response 등)을 사용하려면 current 모듈을 import 해야한다.
db의 경우에는 current.db에 web2py의 db를 담아서 modules에서 사용하더라.
즉, 아래와 같은 작업이 필요하다.

(1) model의 db.py에 자신이 사용할 db를 생성한 부분에서 아래 코드 처럼 current.db를 만들어준다. (빨간 부분이 추가해줘야할 부분이다.)

    from gluon import current
    db = DAL('sqlite://webform.sqlite')
    current.db = db

(2) db를 사용할 modules의 코드에 가서 current를 import하고 current.db를 받아온다.

    from gluon import current
    ...
    (db를 사용할 함수 내에서)
    db = current.db

이렇게 하면이제 modules의 코드에 있는 함수에서 db를 접근할 수 있다.

정확한 current에 대한 설명은 web2py books에서 확인할 수 있다.
http://web2py.com/books/default/chapter/29/04/the-core?search=current#Accessing-the-API-from-Python-modules

댓글 없음:

댓글 쓰기