2017-03-24 20 views
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、どうすれば動作させることができますか? それを行う簡単な方法がありますか?

答えて

1

同僚 - >アドレスは1対多の関係ですか?それはリストを期待するので、おそらくこのようなものを試してみてください:

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] 
+0

それは、私はそれがオブジェクトが必要だろうと思ったが、それはリストが動作すると思った。ありがとう!! – Charleess

+1

kwarg uselist = Falseを関係に追加して、SQLAにコレクションではなくオブジェクトにマップさせることもできます。 – TheArchitect

関連する問題