Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import logging
  3.  
  4. from sqlalchemy import Column
  5. from sqlalchemy import ForeignKey
  6. from sqlalchemy import Integer
  7. from sqlalchemy import String
  8. from sqlalchemy import create_engine
  9. from sqlalchemy.ext.declarative import declarative_base
  10. from sqlalchemy.orm import scoped_session, relationship
  11. from sqlalchemy.orm import sessionmaker
  12. from zope.sqlalchemy import ZopeTransactionExtension
  13.  
  14. DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
  15. Model = declarative_base()
  16.  
  17. log = logging.getLogger(__name__)
  18.  
  19.  
  20. class Department(Model):
  21. __tablename__ = 'department'
  22. id = Column(Integer, primary_key=True)
  23. employees = relationship('Employee', backref='department')
  24.  
  25.  
  26. class Employee(Model):
  27. __tablename__ = 'employee'
  28. id = Column(Integer, primary_key=True)
  29. name = Column(String)
  30. department_id = Column(Integer, ForeignKey('department.id'))
  31. email_addresses = relationship('EmailAddress', backref='employee')
  32.  
  33.  
  34. class EmailAddress(Model):
  35. __tablename__ = 'email'
  36. id = Column(Integer, primary_key=True)
  37. value = Column(String)
  38. employee_id = Column(Integer, ForeignKey('employee.id'))
  39.  
  40. def __init__(self, employee_id, email):
  41. self.employee_id = employee_id
  42. self.value = email
  43.  
  44. engine = create_engine('sqlite://')
  45. DBSession.configure(bind=engine)
  46. Model.metadata.create_all(engine)
  47.  
  48. department1 = Department()
  49. department2 = Department()
  50. DBSession.add(department1)
  51. DBSession.add(department2)
  52. employee = Employee()
  53. employee.email_addresses.append(EmailAddress(employee.id, 'e@mail.com'))
  54. DBSession.add(employee)
  55. department1.employees.append(employee)
  56. DBSession.flush()
  57.  
  58. print(DBSession.query(Department).filter(Department.employees.any(Employee.email_addresses.any(EmailAddress.value == 'e@mail.com'))).all())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement