0

次のように server_sqlalchemy の例を変更して、複数のテーブルを有効にし、 、、 、と同様のpermissions = Array(Permission).store_as(table(multi=True))メソッドを追加しました。get_permissionput_permissionget_all_permissionget_userput_userget_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.rollback() を発行します。元の例外は: (sqlite3.IntegrityError) UNIQUE 制約が失敗しました: permission.id [SQL: 'INSERT INTO パーミッション (id、操作、アプリケーション) VALUES (?, ?, ?)'] [パラメータ: ((3, 'modify' , 'usermgr'), (4, 'read', 'accountmgr'))]

明らかに、コードは p,q gain を許可テーブルに挿入しようとして失敗しています。マルチテーブルは user_permissions テーブルにのみ挿入するべきではありませんか? そうでない場合、クライアントに表示される望ましい動作を実現するにはどうすればよいですか?

ありがとう

4

1 に答える 1