这是一个简单的基于 ZODB3 的数据存储,定义了一个用户User类,一个应用 App 类,App类用来操作User数据,连接默认使用的 ZEO。你需要至少安装Python 2.3 及以上版本并且安装了 ZODB 3

#!/usr/bin/env python
# encoding: utf-8
"""
user.py
Created by pantao on 2012-04-17.
Copyright (c) 2012 aitine.com. All rights reserved.
"""
import sys, os
import transaction
from persistent import Persistent
from ZEO import ClientStorage
import ZODB
from ZODB.POSException import ConflictError
from BTrees import OOBTree

class User(Persistent):
    """Class for a user
    """
    def __init__(self, login, email, password):
        self.login = login.lower()
        self.email = email.lower()
        self.password = password

class App():
    """"""
    def __init__(self, conn):
        self.conn = conn
        self.root = self.conn.root()

    def get_users(self):
        if not self.root.has_key('users'):
            return None
        return self.root['users'].values()

    def add_user(self, user):
        if not self.root.has_key('users'):
            print('Create new ')
            self.root['users'] = OOBTree.OOBTree()
            transaction.commit()
        users = self.root['users']
        if not users.has_key(user.login):
            users[user.login] = user
            transaction.commit()
        else:
            return None
        return users[user.login]

def main():
    app = App(ZODB.DB(ClientStorage.ClientStorage('/tmp/zeosocket')).open())
    while 1:
        us = app.get_users()
        if us:
            for u in us:
                print('<User {} : {} >'.format(u.login, u.email))
        l,e,p = raw_input('Enter user info:').split(' ')
        u = User(l,e,p)
        app.add_user(u)

if __name__ == '__main__':
    main()

标签: none

评论已关闭