Advertisement
Guest User

Untitled

a guest
Aug 18th, 2013
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.33 KB | None | 0 0
  1. from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
  2. from sqlalchemy.orm import sessionmaker, relationship
  3. from sqlalchemy.ext.declarative import declarative_base, declared_attr
  4.  
  5. class BaseCFG(object):
  6.     @declared_attr
  7.     def __tablename__(cls):  # @NoSelf
  8.         return cls.__name__.lower()
  9.  
  10. engine = create_engine('sqlite:///:memory:')
  11. Base = declarative_base(cls=BaseCFG)
  12. Session = sessionmaker(bind=engine)
  13.  
  14. class Item(Base):
  15.     id = Column(Integer, primary_key=True)
  16.     data = Column(String)
  17.     i18ns = relationship("ItemI18N", backref="item")
  18.  
  19. class ItemI18N(Base):
  20.     lang_short = Column(String, primary_key=True)
  21.     item_id = Column(Integer, ForeignKey('item.id'), primary_key=True)
  22.     name = Column(String)
  23.  
  24. Base.metadata.create_all(engine)
  25. session = Session()
  26.  
  27. # Init data
  28. item = Item(data="item")
  29. item_en = ItemI18N(name="English Name", lang_short="en")
  30. item.i18ns.append(item_en)
  31. item_de = ItemI18N(name="German Name", lang_short="de")
  32. item.i18ns.append(item_de)
  33. session.add(item)
  34.  
  35. # Use it as a list
  36. item = session.query(Item).first()
  37. print item.data, [i18n.name for i18n in item.i18ns if i18n.lang_short == "en"][0]
  38.  
  39. # Get the name separately
  40. item, name = session.query(Item, ItemI18N.name).join(ItemI18N).filter(ItemI18N.lang_short == "en").first()
  41. print item.data, name
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement