2007-08-08

SQLAlchemyでMySQLのyear型が使えない

MSYearというmysql用の型のクラスがあるのだが、実際にcreate table文を作ると、VARCHAR型として作られてしまう。

この件調査中。

追記----
これがSQLAlchemyの方針にとって正しいのか不明なんだけど、sqlalchemyのソースのsqlalchemy/databases/mysql.pyのMSYearに以下のget_search_list(self)メソッドを追記すれば一応解決する。


class MSYear(sqltypes.String):
"""MySQL YEAR type, for single byte storage of years 1901-2155"""

def get_col_spec(self):
if self.length is None:
return "YEAR"
else:
return "YEAR(%d)" % self.length

def get_search_list(self):
return [self.__class__]

year型がMySQLの型の中でもすごく特殊な実装なので、非常に難しい部分なんだろう。
ちょっとSQLAlchemyの作者の方々にメールを送ってみようかなあ。

追記---
メールを送ってみた。
こういうのを送るのはどきどきするなあ。英語きっとぐちゃぐちゃだし。通じればいいんだけど。

追記---
返事がきた。
0.3のメンテナンスブランチ&0.4では修正済みとのことです。
あああ、こういう最新版をチェックせずに指摘メールを送ったり、(さらには自分で修正を試みたり)というのはいけないことだなあと思った。