2
人と住所を格納するデータベースを作成しようとしています。私は継承されたクラスを使用して両方のアドレスを作成しました。私はその後、同僚にアドレスを追加するSQLAlchemyの継承クラスにデータを追加する
adr1 = Home_Address(country='France', city='Paris')
adr2 = Work_Address(country='France', city='Lyon')
col = Colleague(first_name='Joe', last_name='Dalton')
col.home_address = adr1
col.work_address = adr2
を試してみたが、これは起こる
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import ForeignKey, Column, Integer, String, Float
from sqlalchemy.orm import relationship
Base = declarative_base()
class Colleague(Base):
""" Generic Colleague """
__tablename__ = 'colleagues'
id = Column(Integer, primary_key=True)
first_name = Column(String(50))
last_name = Column(String(50))
home_address = relationship('Home_Address', back_populates='colleague')
work_address = relationship('Work_Address', back_populates='colleague')
class Address(Base):
""" Generic Address """
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
adr_type = Column('type', String(50))
country = Column(String(50))
state = Column(String(50))
county = Column(String(50))
city = Column(String(50))
district = Column(String(50))
street = Column(String(50))
house_number = Column(Integer)
postal_code = Column(String(50))
__mapper_args__ = {
'polymorphic_on' : adr_type
}
class Home_Address(Address):
__tablename__ = 'home_addresses'
id = Column(Integer, ForeignKey('addresses.id'), primary_key=True)
colleague_id = Column(Integer, ForeignKey('colleagues.id'))
colleague = relationship('Colleague', back_populates='home_address')
__mapper_args__ = {
'polymorphic_identity' : 'home_addresses'
}
class Work_Address(Address):
__tablename__ = 'work_addresses'
id = Column(Integer, ForeignKey('addresses.id'), primary_key=True)
colleague_id = Column(Integer, ForeignKey('colleagues.id'))
colleague = relationship('Colleague', back_populates='work_address')
__mapper_args__ = {
'polymorphic_identity' : 'work_addresses'
}
:
TypeError: Incompatible collection type: Home_Address is not list-like
col.home_address
ではなく、私のオブジェクトを与えるのは、空のリストを与えますHome_Address
、どうすれば動作させることができますか? それを行う簡単な方法がありますか?
それは、私はそれがオブジェクトが必要だろうと思ったが、それはリストが動作すると思った。ありがとう!! – Charleess
kwarg uselist = Falseを関係に追加して、SQLAにコレクションではなくオブジェクトにマップさせることもできます。 – TheArchitect