【问题标题】:Spyne model for existing Database structure现有数据库结构的 Spyne 模型
【发布时间】:2016-02-25 19:51:55
【问题描述】:

我在 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

最后一个字段是用户表的外键,但它的名字和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 个类。

提前谢谢你,尤里

【问题讨论】:

    标签: postgresql sqlalchemy spyne


    【解决方案1】:

    你的答案是正确的。作为简单表的替代方案,您可以省略列定义并让 sqlalchemy 的反射引擎来解决。

    meta = TableModel.Attributes.sqla_metadata
    meta.reflect()
    class User(TableModel):
        __table__ = meta.tables['user']
    

    将使用来自表列及其类型的尽可能多的信息来重构 User 类。

    【讨论】:

      【解决方案2】:

      我自己找到的,很抱歉打扰任何人,

      from spyne.model.complex import table
      Permissions= Array(permission).customize(store_as=table(right='perm_user_id'))
      

      【讨论】:

        猜你喜欢
        • 2018-11-27
        • 2016-03-15
        • 1970-01-01
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 2011-01-15
        • 2016-06-24
        • 1970-01-01
        相关资源
        最近更新 更多