假设我有一个类似这样的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对象的步骤:
^{pr2}$这样的事情有可能吗?在
编辑:我发现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\u id列。在
我会通过创建一个方法来实现这一点。在
然后你要:
^{pr2}$我同意Jonathan的一般方法,但是我觉得在会话中添加employee对象和设置employee类型应该是独立操作。下面是一个实现,它将type_name作为属性,并要求在设置会话之前将其添加到会话中:
相关问题 更多 >
编程相关推荐