Рассмотрим следующую модель (от pythoncentral учебники):SQLAlchemy многие ко многим отношений путаница
class Department(Base):
__tablename__ = 'department'
id = Column(Integer, primary_key=True)
name = Column(String)
employees = relationship(
'Employee',
secondary='department_employee_link'
)
class Employee(Base):
__tablename__ = 'employee'
id = Column(Integer, primary_key=True)
name = Column(String)
hired_on = Column(DateTime, default=func.now())
departments = relationship(
Department,
secondary='department_employee_link'
)
class DepartmentEmployeeLink(Base):
__tablename__ = 'department_employee_link'
department_id = Column(Integer, ForeignKey('department.id'), primary_key=True)
employee_id = Column(Integer, ForeignKey('employee.id'), primary_key=True)
extra_data = Column(String(256))
department = relationship(Department, backref=backref("employee_assoc"))
employee = relationship(Employee, backref=backref("department_assoc"))
Я понимаю, что этот кусок кода устанавливает многие-многие отношения между сотрудниками и depts.Suppose я должен вставить department_id и employee_id в таблицу соединений DepartmentEmployee, как это сделать? В учебнике указано:
>>> IT = Department(name="IT")
>>> John = Employee(name="John")
>>> John_working_part_time_at_IT = DepartmentEmployeeLink(department=IT, employee=John, extra_data='part-time')
>>> s = session()
>>> s.add(John_working_part_time_at_IT)
>>> s.commit()
Но я хочу сделать это отдельно. во-первых, я хочу добавить данные в таблицу отдела, а затем в таблицу сотрудников. Наконец, мне нужно заполнить ссылку Dept-employee, в которой пользователь вводит только столбец extra_data ... Как мне это сделать? я пытался делать что-то вроде этого
def mapper:
que=DBSession.query(Department)
que2=DBSession.query(Strings)
rel=DepartmentEmployeeLink(extra_data=str(x))//__init__ed this
rel.department=que
rel.employee=que.employees[0].id
DBSession.add(rel)
Это, как я хочу, чтобы вставка произойдет, так как у меня уже есть данные внутри отдела и сотрудника. Может ли кто-нибудь сказать мне, как выполнить это, например, вставить в таблицу ссылок, если у меня есть данные в других двух таблицах?
Я узнал, что есть способ сделать это как «employees.append.xxx», но я не понимаю. Может ли кто-нибудь указать мне в правильном направлении, пожалуйста? Заранее спасибо.
IT = Отдел (имя = "IT") John = Employee (имя = "John") Эти две линии вставки в Департамент и Сотрудника таблицы или просто запрос? Я не думаю, что вы должны s.add (Джон), он выкинет ошибку, пропуская катушку. Документы в Pycentral link не добавляют их. Зачем? Кроме того, можете ли вы рассказать мне, как мне получить список сотрудников в этом отделе в запросе? – Tania
И, если у меня уже есть данные, вставленные в департаменты, как мне добавить сотрудников? SOmething like myvar = DBSession.query (department) .filter (Department = IT); myvar.employees.append (Джон)? Это мой вопрос. И как мне найти отдел сотрудника? – Tania
it_department = s.query (Department) .filter (Department.name = "IT"); it_employees = it_department.employees; erick = Employee (name = "Erick"); it_department.employees.append (erick); s.commit(); john = s.query (Employee) .filter (Employee.name = "John"); johns_departments = john.departments; –