SQLAlchemy 0.7 の Integer の仕様変更

SQLAlchemy 0.7 からどうやら Integer(3) みたいな形は警告がでるようになった。

# -*- coding: utf-8 -*-
from sqlalchemy import Column, Integer, String

Base = declarative_base()
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    age = Column(Integer(3))
    password = Column(String)

    def __init__(self, name, fullname, age, password):
         self.name = name
         self.fullname = fullname
         self.age = age
         self.password = password     

みたいな形で書いて、テーブルを作成するために、Base.metadata.create_all(bind=Session.bind) でテーブルを作成したら、以下のような警告がでた。

/path/to/user.py:11: SADeprecationWarning: Passing arguments to type object constructor <class 'sqlalchemy.types.Integer'> is deprecated

警告がでるだけで実際にテーブルは作成されるが、age の所が int(11) という形になる。

Simple types like Integer, Date etc. in the core types module don't accept arguments. The default constructor that accepts/ignores a catchall *args, **kwargs is restored as of 0.7b4/0.7.0, but emits a deprecation warning.

Home · sqlalchemy/sqlalchemy Wiki · GitHub

との事なので、引数に渡さないようになったよう。

If arguments are being used with a core type like Integer, it may be that you intended to use a dialect specific type, such as sqlalchemy.dialects.mysql.INTEGER which does accept a "display_width" argument for example.

Home · sqlalchemy/sqlalchemy Wiki · GitHub

って書いてあるから数値を指定したかったら、sqlalchemy.dialects.mysql.INTEGER で指定しろって事でいいのかな。


2011/08/02 追記:
やっぱり sqlalchemy.dialects.mysql.INTEGER を使うのが正解みたい。

# -*- coding: utf-8 -*-
from sqlalchemy import Column, String
from sqlalchemy.dialects.mysql import INTEGER as Integer

Base = declarative_base()
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    age = Column(Integer(3))
    password = Column(String)

    def __init__(self, name, fullname, age, password):
         self.name = name
         self.fullname = fullname
         self.age = age
         self.password = password     

これで int(3) になった。