.. autosource::
-"""
\ No newline at end of file
+"""
from datetime import datetime
-from sqlalchemy import (create_engine, MetaData, Table, Column, Integer,
- String, DateTime, Float, ForeignKey, and_)
-from sqlalchemy.orm import mapper, relationship, Session
+from sqlalchemy import (create_engine, Column, Integer, String, DateTime,
+ Float, ForeignKey, and_)
+from sqlalchemy.orm import relationship, Session
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
+
class Order(Base):
__tablename__ = 'order'
customer_name = Column(String(30), nullable=False)
order_date = Column(DateTime, nullable=False, default=datetime.now())
order_items = relationship("OrderItem", cascade="all, delete-orphan",
- backref='order')
+ backref='order')
def __init__(self, customer_name):
self.customer_name = customer_name
+
class Item(Base):
__tablename__ = 'item'
item_id = Column(Integer, primary_key=True)
def __repr__(self):
return 'Item(%r, %r)' % (
- self.description, self.price
- )
+ self.description, self.price
+ )
+
class OrderItem(Base):
__tablename__ = 'orderitem'
self.price = price or item.price
item = relationship(Item, lazy='joined')
+
if __name__ == '__main__':
engine = create_engine('sqlite://')
Base.metadata.create_all(engine)
from sqlalchemy.ext.associationproxy import association_proxy
import operator
+
class Base(object):
id = Column(Integer, primary_key=True)
+
Base = declarative_base(cls=Base)
+
class GenDefaultCollection(MappedCollection):
def __missing__(self, key):
self[key] = b = B(key)
return b
+
class A(Base):
__tablename__ = "a"
- associations = relationship("B",
+ associations = relationship(
+ "B",
collection_class=lambda: GenDefaultCollection(operator.attrgetter("key"))
)
association proxy of B.
"""
+
class B(Base):
__tablename__ = "b"
a_id = Column(Integer, ForeignKey("a.id"), nullable=False)
if values:
self.values = values
+
class C(Base):
__tablename__ = "c"
b_id = Column(Integer, ForeignKey("b.id"), nullable=False)
value = Column(Integer)
+
def __init__(self, value):
self.value = value
+
if __name__ == '__main__':
engine = create_engine('sqlite://', echo=True)
Base.metadata.create_all(engine)
session.commit()
print(a1.collections["2"])
-
-
from datetime import datetime
-from sqlalchemy import (create_engine, MetaData, Table, Column, Integer,
- String, DateTime, Float, ForeignKey, and_)
-from sqlalchemy.orm import mapper, relationship, Session
+from sqlalchemy import (create_engine, Column, Integer, String, DateTime,
+ Float, ForeignKey)
+from sqlalchemy.orm import relationship, Session
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.associationproxy import association_proxy
Base = declarative_base()
+
class Order(Base):
__tablename__ = 'order'
customer_name = Column(String(30), nullable=False)
order_date = Column(DateTime, nullable=False, default=datetime.now())
order_items = relationship("OrderItem", cascade="all, delete-orphan",
- backref='order')
+ backref='order')
items = association_proxy("order_items", "item")
def __init__(self, customer_name):
self.customer_name = customer_name
+
class Item(Base):
__tablename__ = 'item'
item_id = Column(Integer, primary_key=True)
self.price = price
def __repr__(self):
- return 'Item(%r, %r)' % (
- self.description, self.price
- )
+ return 'Item(%r, %r)' % (self.description, self.price)
+
class OrderItem(Base):
__tablename__ = 'orderitem'
self.price = price or item.price
item = relationship(Item, lazy='joined')
+
if __name__ == '__main__':
engine = create_engine('sqlite://')
Base.metadata.create_all(engine)
# print customers who bought 'MySQL Crowbar' on sale
orders = session.query(Order).\
- join('order_items', 'item').\
- filter(Item.description == 'MySQL Crowbar').\
- filter(Item.price > OrderItem.price)
+ join('order_items', 'item').\
+ filter(Item.description == 'MySQL Crowbar').\
+ filter(Item.price > OrderItem.price)
print([o.customer_name for o in orders])