読者です 読者をやめる 読者になる 読者になる

主キーの定義時の注意

SQLAlchemy MySQL

auto_incrementを無効にする

カラム定義にprimary_key=Trueを指定するとSQLAlchemyは自動的にauto_incrementを使用するので、これを無効にするには、カラム定義にautoincrement=Falseをつける。

tbl = Table(
  'table_name', metadata,
  Column('id', Integer, primary_key=True, autoincrement=False),
  # ...
  mysql_engine='InnoDB'
)

以下に記載がある。

unsigned intを使う

次のように、sqlalchemyモジュールが提供するIntegerクラスを使ってunsigned=Trueを指定してもテーブル定義には反映されない(本当に?)。

from sqlalchemy import *

tbl = Table(
  'table_name', metadata,
  Column('id', Integer(unsinged=True), primary_key=True),
  # ...
  mysql_engine='InnoDB'
)

sqlalchemy.databases.mysqlモジュールからMSIntegerを明示的にインポートして使用しなくてはならない。

from sqlalchemy import *
from sqlalchemy.database.mysql import MSInteger as Integer

tbl = Table(
  'table_name', metadata,
  Column('id', Integer(unsigned=True), primary_key=True),
  # ...
  mysql_engine='InnoDB'
)