Post

Python 네이티브 객체 데이터베이스 ZODB 라이브러리 알아보기

Python 네이티브 객체 데이터베이스 ZODB 라이브러리 알아보기

오늘은 Python을 가지고 객체로 만들 수 있는 데이터베이스 ZODB 패키지에 대하여 알아보려 합니다.

데이터베이스 트랜젝션이 가능합니다.

ZODB 설치

우선 virtualenv로 파이썬 환경을 분리해줍니다.

1
pip3 install virtualenv
1
virtualenv -mvenv env

env라는 이름의 가상 환경을 생성합니다.

1
source env/bin/activate

가상환경을 폴더에서 활성화합니다.

1
pip3 install --upgrade pip

pip의 업그레이드가 존재하는지 확인하고 진행합니다.

1
pip install ZODB

pip로 ZODB를 설치합니다.

ZODB 기본 사용법

1
2
3
import persistent
import ZODB.FileStorage
import transaction

persistent 객체를 생성할 때에 필요한 패키지와 파일, 트랜젝션에 관련있는 FileStorage, transaction도 가져옵니다.

1
2
3
4
5
6
7
class TestScore(persistent.Persistent):

    def __init__(self):
        self.score = 0

    def visit(self, i):
        self.score += i

persistent 객체를 만들기 위한 class를 작성해줍니다.

score라는 필드가 존재하고, visit 메소드를 통해 원하는 값을 증가시킵니다.

1
2
if __name__ == '__main__':
    storage = ZODB.FileStorage.FileStorage('data.fs')

data.fs 확장자의 파일 스토리지를 만듭니다.

1
    db = ZODB.DB(storage)

객체 데이터베이스를 만듭니다.

1
    connection = db.open()

데이터베이스 연결을 진행합니다.

1
2
    root = connection.root
    root.storage = TestScore()

루트는 데이터베이스의 최상위 수준의 네임스페이스 역활을 하며, 해당 코드에서는 persistent 객체를 넣어서 사용했습니다.

1
2
3
    root.storage.visit(1)
    transaction.commit()
    print(root.storage.score)

트랜섹션 커밋하여 영구적으로 저장할 수 있습니다.

1
2
3
    root.storage.visit(1)
    transaction.abort()
    print(root.storage.score)

커밋을 하고 싶지 않을 때에는 abort할 수 있습니다.

1
2
3
4
5
6
7
    save = transaction.savepoint()
    root.storage.visit(1)
    root.storage.visit(1)
    root.storage.visit(1)
    print(root.storage.score)
    save.rollback()
    print(root.storage.score)

세이브 지점을 만들어서 변경점을 다시 롤백할 수 있습니다.

1
2
3
4
5
6
7
    root.storage.visit(1)
    transaction.doom()
    print(root.storage.score)

    # root.storage.visit(1)
    # transaction.commit()
    # print(root.storage.score)

doom()을 하면 값을 더 이상 변경할 수 없습니다.

This post is licensed under CC BY 4.0 by the author.