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) になった。