내가이 같은 SqlAlchem y의 모델 뭔가 말해봐 :SqlAlchem y의 관계는
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship
Base = declarative_base()
Session = sessionmaker()
class EmployeeType(Base):
__tablename__ = 'employee_type'
id = Column(Integer(), primary_key=True)
name = Column(String(20))
class Employee(Base):
__tablename__ = 'employee'
id = Column(Integer(), primary_key=True)
type_id = Column(Integer(), ForeignKey(EmployeeType.id))
type = relationship(EmployeeType, uselist=False)
session = Session()
session.add(EmployeeType(name='drone'))
session.add(EmployeeType(name='PHB'))
내가 편의를 직원에서 직접 EmployeeType.name에 "관계"의 일종을 가지고 싶습니다를, 그래서 형식 이름이있는 경우 ID 또는 EmployeeType 개체를 찾는 단계를 건너 뛸 수 있습니다.
emp = Employee()
emp.type_name = "drone"
session.add(emp)
session.commit()
assert (emp.type.id == 1)
그런 것이 가능합니까?
편집 : 나는 association_proxy이 도중에이 저를 얻을 수 있습니다 발견 :
class Employee(Base):
...
type_name = association_proxy("type", "name")
나는 그것에 할당하면 것을있는 유일한 문제 :
emp = session.query(Employee).filter_by(EmployeeType.name=='PHB').first()
emp.type_name = 'drone'
이는 employee_type.name 열이 아닌 수정을 employee.type_id 열입니다.
의 "를 부착하여, 나는 또한, 세션에 직원을 부착하기 전에 TYPE_NAME 설정을 허용하는 버전을 채찍질 : 여기에 속성으로 TYPE_NAME가 그것을 설정하기 전에 세션에 추가해야합니다 구현입니다 after_attach "이벤트 리스너를 세션에 추가 : https://gist.github.com/1750520 –