SQLAlchemy TypeDecorator не работает
Я использую xml
в моей базе данных postgresql, и мне нужен пользовательский тип, который мог бы обрабатывать данные xml
в SQLAlchemy.
Поэтому я сделал 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
Он хорошо работает при извлечении значений и обработке результатов. но когда я попытался вставить строку, я получил ошибку(конечно, я поставил body
Как 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}
Видя, что значение body
равно None
, очевидно, что что связывающий процессор не работает правильно, но я думаю, что я реализовал это правильно, поэтому я не знаю, что я должен сделать, чтобы изменить ситуацию.
process_bind_param
дает мне ту же ошибку.
Где я ошибся в своем коде?