1

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

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

4

1 回答 1

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
于 2013-09-26T09:56:40.290 回答