Advertisement
Guest User

Untitled

a guest
Jan 6th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.61 KB | None | 0 0
  1. from __future__ import print_function
  2.  
  3. from sqlalchemy import create_engine, Column, types
  4. from sqlalchemy.ext.declarative import declarative_base
  5. from sqlalchemy.orm import sessionmaker, scoped_session
  6. from sqlalchemy.orm import Session
  7.  
  8. from sqlalchemy import ForeignKey
  9. from sqlalchemy.orm import relationship, backref
  10.  
  11.  
  12. engine = create_engine('sqlite:///:memory:', echo=True)
  13. Base = declarative_base()
  14.  
  15. session = scoped_session(sessionmaker(bind=engine))
  16.  
  17. class Group(Base):
  18. __tablename__ = "groups"
  19. gid = Column(types.Integer, primary_key=True)
  20. name = Column(types.String(255))
  21.  
  22. users = relationship("User", backref="group")
  23.  
  24. def __repr__(self):
  25. ret = "Group(name=%r)" % self.name
  26. for user in self.users:
  27. ret += str(user)
  28.  
  29. class User(Base):
  30. __tablename__ = "users"
  31. login = Column(types.String(50), primary_key=True)
  32. name = Column(types.String(255))
  33. group_id = Column(types.Integer, ForeignKey('groups.gid'))
  34. address = Column(types.String(200),
  35. ForeignKey('addresses.email_address'), )
  36. email = relationship("Address", cascade="all")
  37.  
  38. def __repr__(self):
  39. return "User(login=%r, name=%r)\n%s" % (self.login, self.name,
  40. str(self.email))
  41.  
  42.  
  43. class Address(Base):
  44. __tablename__ = 'addresses'
  45. email_address = Column(types.String(200), nullable=False, primary_key=True)
  46. #user_login = Column(types.String(50), ForeignKey('users.login'))
  47.  
  48. def __repr__(self):
  49. return "<Address(email_address='%s')>" % self.email_address
  50.  
  51.  
  52. Base.metadata.create_all(engine)
  53.  
  54. if __name__ == '__main__':
  55.  
  56. # this works correctly even though we reuse a unique key
  57. u1 = User(login='Guy', name="Some Guy")
  58. u1.email=Address(email_address='nameless@yahoo.com')
  59. u2 = User(login='Gal', name="Some Gal")
  60. u2.email=Address(email_address='nameless@yahoo.com')
  61. session.merge(u1)
  62. session.merge(u2)
  63. session.commit()
  64.  
  65. print("**** two users with addresses")
  66. for u in session.query(User):
  67. print(u)
  68.  
  69.  
  70. # though this is similar it ends up using insertmany and throws a unique key
  71. # constraint even with the merge
  72. u3 = User(login='Mr. User', name="A dude")
  73. u3.email=Address(email_address='james@yahoo.com')
  74. u4 = User(login='Mrs. User', name="A dudette")
  75. u4.email=Address(email_address='jill@yahoo.com')
  76. u5 = User(login='Mrs. User2', name="A dudette2")
  77. u5.email=Address(email_address='jill@yahoo.com')
  78. g1 = Group(name="G1")
  79. g1.users.append(u3)
  80. g1.users.append(u4)
  81. g1.users.append(u5)
  82. print("********* MERGE")
  83. session.merge(g1)
  84. session.commit()
  85.  
  86. print(g1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement