我遇到了在spyne中定义模型以生成多个级别的问题"在" SOAP11。 我最初使用的是示例,但我的任务是为已经存在的表生成服务,所以我陷入困境并试图理解在Spyne属性或Sqlalchemy中搜索。
准确地说,我将从网站上获取示例,并展示我想要达到的目标:
class Permission(TableModel):
__tablename__ = 'permission'
id = UnsignedInteger32(pk=True)
application = Unicode(values=('usermgr', 'accountmgr'))
operation = Unicode(values=('read', 'modify', 'delete'))
perm_user_id = integer
最后一个字段是用户表的FK,但其名称与user_id不同
class User(TableModel):
__tablename__ = 'user'
id = UnsignedInteger32(pk=True)
user_name = Unicode(32, min_len=4, pattern='[a-z0-9.]+', unique=True)
full_name = Unicode(64, pattern='\w+( \w+)+')
email = Unicode(64, pattern=r'[a-z0-9._%+-]+@[a-z0-9.-]+\.[A-Z]{2,4}')
last_pos = Point(2, index='gist')
permissions = Array(Permission).store_as('table')
--- SQL生成尝试添加" WHEN user.id = permission.user_id"但是我需要另一个要过滤的字段(perm_user_id)
帮助我定义类以获得正确的内部标记..实际上它将会再深入3个类。
Thanx in Advance,Yury
答案 0 :(得分:1)
自己找到,很抱歉打扰任何人,
from spyne.model.complex import table
Permissions= Array(permission).customize(store_as=table(right='perm_user_id'))
答案 1 :(得分:1)
你的答案是对的。作为简单表的替代方法,您可以省略列定义,并让sqlalchemy的反射引擎弄明白。
meta = TableModel.Attributes.sqla_metadata
meta.reflect()
class User(TableModel):
__table__ = meta.tables['user']
将使用表列及其类型中尽可能多的信息重建User类。