Python で SQLAlchemy を使用して主キーを操作する
SQLAlchemy オブジェクトの主キーの名前を取得する
方法 1: primary_key
属性を使用する
sqlalchemy.orm.Mapper
クラスには primary_key
属性があり、これは主キーを表す sqlalchemy.Column
オブジェクトのリストを返します。 以下のコード例のように、この属性を使用して主キーの名前を取得できます。
from sqlalchemy import Column, Integer, String, orm
Base = orm.declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
user = User()
# 主キーの名前を取得
primary_key_name = user.primary_key.name
print(primary_key_name) # 出力: id
方法 2: __table__.primary_key
属性を使用する
sqlalchemy.orm.Mapper
クラスには __table__
属性があり、これは関連する sqlalchemy.Table
オブジェクトへの参照を返します。 sqlalchemy.Table
クラスには primary_key
属性があり、これは主キーを表す sqlalchemy.Column
オブジェクトのリストを返します。 以下のコード例のように、これらの属性を使用して主キーの名前を取得できます。
from sqlalchemy import Column, Integer, String, orm
Base = orm.declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
user = User()
# 主キーの名前を取得
primary_key_name = user.__table__.primary_key.name
print(primary_key_name) # 出力: id
方法 3: inspect()
関数を使用する
sqlalchemy.ext.declarative
モジュールの inspect()
関数を使用して、マッパーオブジェクトを取得できます。 マッパーオブジェクトには primary_key
属性があり、これは主キーを表す sqlalchemy.Column
オブジェクトのリストを返します。 以下のコード例のように、この関数を使用して主キーの名前を取得できます。
from sqlalchemy import Column, Integer, String, orm, inspect
Base = orm.declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
user = User()
# マッパーオブジェクトを取得
mapper = inspect(user)
# 主キーの名前を取得
primary_key_name = mapper.primary_key.name
print(primary_key_name) # 出力: id
from sqlalchemy import Column, Integer, String, orm
Base = orm.declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
user = User()
# 方法 1: `primary_key` 属性を使用する
primary_key_name_1 = user.primary_key.name
# 方法 2: `__table__.primary_key` 属性を使用する
primary_key_name_2 = user.__table__.primary_key.name
# 方法 3: `inspect()` 関数を使用する
from sqlalchemy import inspect
mapper = inspect(user)
primary_key_name_3 = mapper.primary_key.name
# 結果を出力
print(primary_key_name_1) # 出力: id
print(primary_key_name_2) # 出力: id
print(primary_key_name_3) # 出力: id
このコードを実行すると、以下の出力が得られます。
id
id
id
__tablename__
属性は、テーブルの名前を指定するために使用されます。primary_key
キーワード引数は、カラムが主キーであることを指定するために使用されます。- 上記のコードでは、
User
クラスはBase
クラスから継承しています。 これは、declarative_base()
関数によって作成されたベースクラスです。
方法 4: sqlalchemy.orm.attributes.get_primary_key()
関数を使用する
sqlalchemy.orm.attributes
モジュールの get_primary_key()
関数を使用して、オブジェクトの主キーを取得できます。 以下のコード例のように、この関数を使用して主キーの名前を取得できます。
from sqlalchemy import Column, Integer, String, orm
Base = orm.declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
user = User()
# 主キーの名前を取得
from sqlalchemy.orm.attributes import get_primary_key
primary_key_name = get_primary_key(user).name
print(primary_key_name) # 出力: id
方法 5: sqlalchemy.inspect()
関数を使用する
from sqlalchemy import Column, Integer, String, orm, inspect
Base = orm.declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
user = User()
# マッパーオブジェクトを取得
mapper = inspect(user)
# 主キーの名前を取得
primary_key_names = [column.name for column in mapper.primary_key_from_columns()]
print(primary_key_names) # 出力: ['id']
sqlalchemy