2013-12-15 4 views
0
에 대한 자동 조회 외래 키 관계

난에 자동으로 SQLAlchemy의 ORM 클래스를 얻기 위해 노력하고 있어요 :SQLAlchemy의 삽입

을하거나 필드에 대한 외부 키 ID를 조회

또는 입력 항목에 대한

필드가 외래 키 테이블에 아직없는 경우 외래 키 테이블에 행을 추가하고 원래 테이블에서 자동 생성 된 ID를 사용하십시오.

는 설명하기 :

클래스 정의 나는 일 실행하면 산업 부문

for i in industry_record[]: 
    industry = Industry(id=i.id, 
        name=i.name, 
        sector=Sector(name=i.sector_name)) 
    session.merge(industry) 

결과 불행하게도을 설정하는 클래스를 사용

class EquityDB_Base(object): 

    @declared_attr 
    def __tablename__(cls): 
     return cls.__name__.lower() 

    __table_args__ = {'mysql_engine': 'InnoDB'} 
    __mapper_args__= {'always_refresh': True} 

    id = Column(Integer, primary_key=True) 

def fk(tablename, nullable=False): 
    return Column("%s_id" % tablename, Integer, 
       ForeignKey("%s.id" % tablename), 
       nullable=nullable) 

class Sector(EquityDB_Base, Base): 
    name = Column(String(40)) 

class Industry(EquityDB_Base, Base): 
    name = Column(String(40)) 
    sector_id = fk('sector') 
    sector = relationship('Sector', backref='industries') 

class Equity(EquityDB_Base, Base): 
    symbol = Column(String(10), primary_key=True) 
    name = Column(String(40)) 
    industry_id = fk('industry') 
    industry = relationship('Industry', backref='industries') 

is - 데이터베이스가 'sector_name'의 각 중복 사용에 대해 섹터 테이블에 개별 행을 추가합니다. 예를 들어 10 개의 업종에서 '기술'을 해당 섹터 이름으로 사용하는 경우 10 개의 업종마다 10 개의 고유 한 sector_id가 생성됩니다. 내가 원하는

-에 대한 데이터베이스에 이미 섹터 이름이 발표 될 때마다입니다 난 분명히 단지 SQLAlchemy의를 배우고 적절한 sector_id

에 자동으로 해결하지만,없는 것 이 동작을 사용하는 방법을 알아 내야합니다.

도움이 될 것입니다.

답변

0

비슷한 질문에 대한 답변보기 create_or_get entry in a table. session 인스턴스가 거기에 사용되는 약은주의해야한다

for i in industry_record[:]: 
    industry = Industry(id=i.id, 
        name=i.name, 
        sector=create_or_get_sector(sector_name=i.sector_name)) 
    session.merge(industry) 

한 가지 : 같은 논리를 적용
은 ,이 같은 것이다 :

def create_or_get_sector(sector_name): 
    obj = session.query(Sector).filter(Sector.name == sector_name).first() 
    if not obj: 
     obj = Sector(name = sector_name) 
     session.add(obj) 
    return obj 

을 아래처럼 사용 create_or_get_sector.