SqlAlchemy UserDefinedType基于内置类型,附加方法

时间:2013-09-24 18:33:33

标签: python sqlalchemy

我的课程Foo定义为:

class Foo(object):
    def bar(self):
       pass

我想扩展sqlalchemy类型:

class MyUnicode(Foo, sqlalchemy.Unicode):
    def bar(self):
        print "MyUnicode::bar"

并定义如下表:

Base = declarative_base()
class Table(Base):
   __tablename__ = "Table"

   first  = Column(Unicode(16))
   second = Column(MyUnicode(16))

最后,我希望能够在这里使用它:

t = query(Table).first()
t.bar()

问题可能在于TypeEngine,因为调试器显示t的类型为unicode而非MyUnicode甚至sqlalchemy.Unicode

我试过这样做:

class myunicode(Foo, unicode):
    def bar(self):
        print "myunicode::bar"

class MyUnicode(sqlalchemy.Unicode):

    @property
    def python_type(self):
        return myunicode

但这不起作用。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

我认为你需要覆盖def result_processor(self, dialect, coltype):,因为你从数据库中获得的类型仍然只是一个unicode字符串,你必须将其转换为你的python类型。

这样的事情:

def result_processor(self, dialect, coltype):
    def process(value):
        if value is not None:
            return MyUnicode(value)   # value is a regular unicode string
        else:
            return MyUnicode()
    return process