【发布时间】:2012-02-23 11:50:31
【问题描述】:
假设我有一个类似这样的 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'))
为了方便起见,我希望 Employee 直接与 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 列。
【问题讨论】:
标签: python sqlalchemy foreign-key-relationship