我的课程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
但这不起作用。有什么建议吗?
答案 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