我修改了 server_sqlalchemy 示例以启用多表,如下所示并permissions = Array(Permission).store_as(table(multi=True))
添加了方法get_permission
,类似于,put_permission
和.get_all_permission
get_user
put_user
get_all_user
在客户端,我使用 suds 客户端如下:
from suds.client import Client
c = Client('http://localhost:8000/?wsdl')
#create two permissions
p = c.factory.create('Permission')
p.application = 'usermgr'
p.operation = 'modify'
p.id = c.service.put_permission(p)
q = c.factory.create('Permission')
q.application = 'accountmgr'
q.operation = 'read'
q.id = c.service.put_permission(q)
#create two users
u = c.factory.create('User')
u.user_name = 'abcd'
u.full_name = 'abcd xyz'
u.email = 'abcd@xyz.com'
u.permissions = c.factory.create('PermissionArray')
u.permissions.Permission = [p,q]
u.id = c.service.put_user(u)
v = c.factory.create('User')
v.user_name = 'dcba'
v.full_name = 'dcba zyx'
v.email = 'dcba@zyx.com'
v.permissions = c.factory.create('PermissionArray')
v.permissions.Permission = [p,q] #note the same p,q used in u
v.id = c.service.put_user(v)
put_user(v)
失败是由于
sqlalchemy.exc.InvalidRequestError:由于之前刷新期间的异常,此 Session 的事务已回滚。要使用此 Session 开始新事务,首先发出 Session.rollback()。原始异常是:(sqlite3.IntegrityError) UNIQUE 约束失败:permission.id [SQL: 'INSERT INTO permission (id, operation, application) VALUES (?, ?, ?)'] [parameters: ((3, 'modify' , 'usermgr'), (4, 'read', 'accountmgr'))]
显然,代码试图将 p,q gain 插入权限表并失败。多表不应该只插入 user_permissions 表吗?如果没有,如何实现客户端中显示的所需行为?
谢谢