2011-12-16 74 views
4

我在我的postgresql數據庫中使用xml,我需要一個自定義類型可以處理SQLAlchemy中的xml數據。SQLAlchemy TypeDecorator不起作用

所以我做了XMLType班與xml.etree溝通,但它不工作,因爲我希望。

here`s,我寫的代碼:

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 

它運作良好,在檢索值和結果處理。但是當我試圖插入行,我得到一個錯誤(當然,我把bodyxml.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} 

眼見bodyNone,很明顯的是,結合處理器不工作對,但我認爲我已經實施了,所以我不知道該怎麼做才能改變這種狀況。

process_bind_param給我同樣的錯誤。

我的代碼在哪裏出錯?

回答

4

​​函數將XML轉換爲流(默認爲stdout)並返回None。使用ElementTree.tostring()或將其轉儲到StringIO對象。

+0

謝謝。這是我的無知,而不是SQLAlchemy的問題。 :-) – yoloseem 2011-12-16 14:50:40