1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
try:
# import sqlalchemy.mods.threadlocal
pass
except:
pass
from sqlalchemy import *
import time
metadata = create_engine('sqlite://', echo=True)
t1s = Table( 't1s', metadata,
Column( 'id', Integer, primary_key=True),
Column('data', String(100))
)
t2s = Table( 't2s', metadata,
Column( 'id', Integer, primary_key=True),
Column( 't1id', Integer, ForeignKey("t1s.id"), nullable=True ))
t3s = Table( 't3s', metadata,
Column( 'id', Integer, primary_key=True),
Column( 't2id', Integer, ForeignKey("t2s.id"), nullable=True ))
t4s = Table( 't4s', metadata,
Column( 'id', Integer, primary_key=True),
Column( 't3id', Integer, ForeignKey("t3s.id"), nullable=True ))
[t.create() for t in [t1s,t2s,t3s,t4s]]
class T1( object ): pass
class T2( object ): pass
class T3( object ): pass
class T4( object ): pass
mapper( T1, t1s )
mapper( T2, t2s )
mapper( T3, t3s )
mapper( T4, t4s )
cascade = "all, delete-orphan"
use_backref = True
if use_backref:
class_mapper(T1).add_property( 't2s', relation(T2, backref=backref("t1", cascade=cascade), cascade=cascade))
class_mapper(T2).add_property ( 't3s', relation(T3, backref=backref("t2",cascade=cascade), cascade=cascade) )
class_mapper(T3).add_property( 't4s', relation(T4, backref=backref("t3", cascade=cascade), cascade=cascade) )
else:
T1.mapper.add_property( 't2s', relation(T2, cascade=cascade))
T2.mapper.add_property ( 't3s', relation(T3, cascade=cascade) )
T3.mapper.add_property( 't4s', relation(T4, cascade=cascade) )
now = time.time()
print "start"
sess = create_session()
o1 = T1()
sess.save(o1)
for i2 in range(10):
o2 = T2()
o1.t2s.append( o2 )
for i3 in range( 10 ):
o3 = T3()
o2.t3s.append( o3 )
for i4 in range( 10 ):
o3.t4s.append ( T4() )
print i2, i3, i4
print len([s for s in sess])
print "flushing"
sess.flush()
total = time.time() - now
print "done,total time", total
|