微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xml – SQLAlchemy TypeDecorator不起作用

我在我的 postgresql数据库中使用xml,我需要一个自定义类型来处理sqlAlchemy中的xml数据.

所以我让XMLType类与xml.etree进行通信,但它并不像我希望的那样工作.

这是我写的代码

import xml.etree.ElementTree as etree

class XMLType(sqlalchemy.types.TypeDecorator):

    impl = sqlalchemy.types.UnicodeText
    type = etree.Element

    def get_col_spec(self):
        return 'xml'

    def bind_processor(self,dialect):
        def process(value):
            if value is not None:
                return etree.dump(value)
            else:
                return None
        return process

    def process_result_value(self,value,dialect):
        if value is not None:
            value = etree.fromstring(value)
        return value

它适用于检索值和结果处理.但是当我尝试插入一行时,我得到一个错误(当然,我把主体设置为xml.etree.ElementTree.Element对象):

IntegrityError: (IntegrityError) null value in column "body" violates not-null 
constraint "INSERT INTO comments (id,author_id,look_id,body,created_at) 
VALUES (nextval('object_seq'),%(author_id)s,%(look_id)s,%(body)s,Now()) 
RETURNING comments.id" {'body': None,'author_id': 1550L,'look_id': 83293L}

看到正文值为None,很明显绑定处理器无法正常工作,但我认为我已正确实现,所以我不知道如何改变这种情况.

process_bind_param给了我同样的错误.

我的代码在哪里出错了?

解决方法

ElementTree.dump()函数将XML转储为流(认情况下为stdout)并返回None.使用ElementTree.tostring()或将其转储到StringIO对象.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。