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では修正済みとのことです。
あああ、こういう最新版をチェックせずに指摘メールを送ったり、(さらには自分で修正を試みたり)というのはいけないことだなあと思った。