一个简单的基于 ZODB3 的用户数据存储
这是一个简单的基于 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()
评论已关闭