mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-06-04 06:48:27 -04:00
c0b5a0446b
tests extend from either TestBase or ORMTest, using additional mixins for special assertion methods as needed
97 lines
2.7 KiB
Python
97 lines
2.7 KiB
Python
import testenv; testenv.configure_for_tests()
|
|
from sqlalchemy import *
|
|
from sqlalchemy.orm import *
|
|
from testlib import *
|
|
from testlib import fixtures
|
|
import gc
|
|
|
|
# in this test we are specifically looking for time spent in the attributes.InstanceState.__cleanup() method.
|
|
|
|
ITERATIONS = 100
|
|
|
|
class SessionTest(TestBase, AssertsExecutionResults):
|
|
def setUpAll(self):
|
|
global t1, t2, metadata,T1, T2
|
|
metadata = MetaData(testing.db)
|
|
t1 = Table('t1', metadata,
|
|
Column('c1', Integer, primary_key=True),
|
|
Column('c2', String(30)))
|
|
|
|
t2 = Table('t2', metadata,
|
|
Column('c1', Integer, primary_key=True),
|
|
Column('c2', String(30)),
|
|
Column('t1id', Integer, ForeignKey('t1.c1'))
|
|
)
|
|
|
|
metadata.create_all()
|
|
|
|
l = []
|
|
for x in range(1,51):
|
|
l.append({'c2':'this is t1 #%d' % x})
|
|
t1.insert().execute(*l)
|
|
for x in range(1, 51):
|
|
l = []
|
|
for y in range(1, 100):
|
|
l.append({'c2':'this is t2 #%d' % y, 't1id':x})
|
|
t2.insert().execute(*l)
|
|
|
|
class T1(fixtures.Base):
|
|
pass
|
|
class T2(fixtures.Base):
|
|
pass
|
|
|
|
mapper(T1, t1, properties={
|
|
't2s':relation(T2, backref='t1')
|
|
})
|
|
mapper(T2, t2)
|
|
|
|
def tearDownAll(self):
|
|
metadata.drop_all()
|
|
clear_mappers()
|
|
|
|
@profiling.profiled('clean', report=True)
|
|
def test_session_clean(self):
|
|
for x in range(0, ITERATIONS):
|
|
sess = create_session()
|
|
t1s = sess.query(T1).filter(T1.c1.between(15, 48)).all()
|
|
for index in [2, 7, 12, 15, 18, 20]:
|
|
t1s[index].t2s
|
|
|
|
sess.close()
|
|
del sess
|
|
gc.collect()
|
|
|
|
@profiling.profiled('dirty', report=True)
|
|
def test_session_dirty(self):
|
|
for x in range(0, ITERATIONS):
|
|
sess = create_session()
|
|
t1s = sess.query(T1).filter(T1.c1.between(15, 48)).all()
|
|
|
|
for index in [2, 7, 12, 15, 18, 20]:
|
|
t1s[index].c2 = 'this is some modified text'
|
|
for t2 in t1s[index].t2s:
|
|
t2.c2 = 'this is some modified text'
|
|
|
|
del t1s
|
|
gc.collect()
|
|
|
|
sess.close()
|
|
del sess
|
|
gc.collect()
|
|
|
|
@profiling.profiled('noclose', report=True)
|
|
def test_session_noclose(self):
|
|
for x in range(0, ITERATIONS):
|
|
sess = create_session()
|
|
t1s = sess.query(T1).filter(T1.c1.between(15, 48)).all()
|
|
for index in [2, 7, 12, 15, 18, 20]:
|
|
t1s[index].t2s
|
|
|
|
del sess
|
|
gc.collect()
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
testenv.main()
|