📄 objupdatespeed.py
字号:
import testenv; testenv.configure_for_tests()import time, gc, resourcefrom sqlalchemy import *from sqlalchemy.orm import *from testlib import *NUM = 100metadata = MetaData(testing.db)Person_table = Table('Person', metadata, Column('id', Integer, primary_key=True), Column('name', String(40)), Column('sex', Integer), Column('age', Integer))Email_table = Table('Email', metadata, Column('id', Integer, primary_key=True), Column('person_id', Integer, ForeignKey('Person.id')), Column('address', String(300)))class Person(object): passclass Email(object): def __repr__(self): return '<email %s %s>' % (getattr(self, 'id', None), getattr(self, 'address', None))mapper(Person, Person_table, properties={ 'emails': relation(Email, backref='owner', lazy=False) })mapper(Email, Email_table)compile_mappers()def setup(): metadata.create_all() i = Person_table.insert() data = [{'name':'John Doe','sex':1,'age':35}] * NUM i.execute(data) i = Email_table.insert() for j in xrange(1, NUM + 1): i.execute(address='foo@bar', person_id=j) if j % 2: i.execute(address='baz@quux', person_id=j) print "Inserted %d rows." % (NUM + NUM + (NUM // 2))def orm_select(session): return session.query(Person).all()@profiling.profiled('update_and_flush')def update_and_flush(session, people): for p in people: p.name = 'Exene Cervenka' p.sex = 2 p.emails[0].address = 'hoho@lala' session.flush()def all(): setup() try: t, t2 = 0, 0 def usage(label): now = resource.getrusage(resource.RUSAGE_SELF) print "%s: %0.3fs real, %0.3fs user, %0.3fs sys" % ( label, t2 - t, now.ru_utime - usage.last.ru_utime, now.ru_stime - usage.last.ru_stime) usage.snap(now) usage.snap = lambda stats=None: setattr( usage, 'last', stats or resource.getrusage(resource.RUSAGE_SELF)) session = create_session() gc.collect() usage.snap() t = time.clock() people = orm_select(session) t2 = time.clock() usage('load objects') gc.collect() usage.snap() t = time.clock() update_and_flush(session, people) t2 = time.clock() usage('update and flush') finally: metadata.drop_all()if __name__ == '__main__': all()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -