說我有一個SQLAlchemy的模式是這樣的:到特定的列SQLAlchemy的關係
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,通過附加一個「 after_attach「事件監聽器到會話:https://gist.github.com/1750520 – 2012-02-06 07:47:45