mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-06-01 05:18:44 -04:00
c6bceb7775
- converted all eager to joined in examples - fixed beaker/advanced.py to reference RelationshipCache
55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
from sqlalchemy import *
|
|
from sqlalchemy.orm import *
|
|
from sqlalchemy.test import profiling
|
|
|
|
NUM = 500
|
|
DIVISOR = 50
|
|
|
|
engine = create_engine('sqlite://')
|
|
meta = MetaData(engine)
|
|
items = Table('items', meta,
|
|
Column('item_id', Integer, primary_key=True),
|
|
Column('value', String(100)))
|
|
subitems = Table('subitems', meta,
|
|
Column('sub_id', Integer, primary_key=True),
|
|
Column('parent_id', Integer, ForeignKey('items.item_id')),
|
|
Column('value', String(100)))
|
|
|
|
class Item(object):pass
|
|
class SubItem(object):pass
|
|
mapper(Item, items, properties={'subs':relationship(SubItem, lazy='joined')})
|
|
mapper(SubItem, subitems)
|
|
|
|
def load():
|
|
global l
|
|
l = []
|
|
for x in range(1,NUM/DIVISOR + 1):
|
|
l.append({'item_id':x, 'value':'this is item #%d' % x})
|
|
#print l
|
|
items.insert().execute(*l)
|
|
for x in range(1, NUM/DIVISOR + 1):
|
|
l = []
|
|
for y in range(1, DIVISOR + 1):
|
|
z = ((x-1) * DIVISOR) + y
|
|
l.append({'sub_id':z,'value':'this is item #%d' % z, 'parent_id':x})
|
|
#print l
|
|
subitems.insert().execute(*l)
|
|
|
|
@profiling.profiled('massjoinedload', always=True, sort=['cumulative'])
|
|
def massjoinedload(session):
|
|
session.begin()
|
|
query = session.query(Item)
|
|
l = query.all()
|
|
print "loaded ", len(l), " items each with ", len(l[0].subs), "subitems"
|
|
|
|
def all():
|
|
meta.create_all()
|
|
try:
|
|
load()
|
|
massjoinedload(create_session())
|
|
finally:
|
|
meta.drop_all()
|
|
|
|
if __name__ == '__main__':
|
|
all()
|