On Sun, Sep 06, 2009 at 09:54:43AM +0200, Tobias Weber wrote:
> class A(InheritableSQLObject):
> def _init(self, *args, **kargs):
> InheritableSQLObject._init(self, *args, **kargs)
> print self.__class__
> if 'name' in dir(self):
> # This should never fail
> print getattr(self, 'name')
>
> class B(A):
> name = sqlobject.StringCol()
>
> class C(B):
> pass
>
> sqlobject.sqlhub.processConnection =
> sqlobject.connectionForURI('sqlite:/tmp/x')
>
> for klass in (A, B, C):
> klass.createTable(ifNotExists = True)
Works for me:
print list(B.select())
C(name = 'X')
print list(B.select())
prints
1/QueryOne: SELECT tbl_name FROM sqlite_master WHERE type='table' AND
tbl_name = 'a'
1/QueryR : SELECT tbl_name FROM sqlite_master WHERE type='table' AND
tbl_name = 'a'
2/Query : CREATE TABLE a (
id INTEGER PRIMARY KEY,
child_name VARCHAR (255)
)
2/QueryR : CREATE TABLE a (
id INTEGER PRIMARY KEY,
child_name VARCHAR (255)
)
3/QueryOne: SELECT tbl_name FROM sqlite_master WHERE type='table' AND
tbl_name = 'b'
3/QueryR : SELECT tbl_name FROM sqlite_master WHERE type='table' AND
tbl_name = 'b'
4/Query : CREATE TABLE b (
id INTEGER PRIMARY KEY,
name TEXT,
child_name VARCHAR (255)
)
4/QueryR : CREATE TABLE b (
id INTEGER PRIMARY KEY,
name TEXT,
child_name VARCHAR (255)
)
5/QueryOne: SELECT tbl_name FROM sqlite_master WHERE type='table' AND
tbl_name = 'c'
5/QueryR : SELECT tbl_name FROM sqlite_master WHERE type='table' AND
tbl_name = 'c'
6/Query : CREATE TABLE c (
id INTEGER PRIMARY KEY,
child_name VARCHAR (255)
)
6/QueryR : CREATE TABLE c (
id INTEGER PRIMARY KEY,
child_name VARCHAR (255)
)
7/Select : SELECT a.id, a.child_name FROM a WHERE ((a.child_name) = ('B'))
7/QueryR : SELECT a.id, a.child_name FROM a WHERE ((a.child_name) = ('B'))
[]
8/QueryIns: INSERT INTO a (child_name) VALUES ('B')
8/QueryR : INSERT INTO a (child_name) VALUES ('B')
9/QueryOne: SELECT child_name FROM a WHERE ((a.id) = (1))
9/QueryR : SELECT child_name FROM a WHERE ((a.id) = (1))
<class '__main__.A'>
10/QueryIns: INSERT INTO b (id, name, child_name) VALUES (1, 'X', 'C')
10/QueryR : INSERT INTO b (id, name, child_name) VALUES (1, 'X', 'C')
11/QueryOne: SELECT name, child_name FROM b WHERE ((b.id) = (1))
11/QueryR : SELECT name, child_name FROM b WHERE ((b.id) = (1))
<class '__main__.B'>
X
12/QueryIns: INSERT INTO c (id, child_name) VALUES (1, NULL)
12/QueryR : INSERT INTO c (id, child_name) VALUES (1, NULL)
13/QueryOne: SELECT child_name FROM c WHERE ((c.id) = (1))
13/QueryR : SELECT child_name FROM c WHERE ((c.id) = (1))
<class '__main__.C'>
X
14/Select : SELECT a.id, a.child_name FROM a WHERE ((a.child_name) = ('B'))
14/QueryR : SELECT a.id, a.child_name FROM a WHERE ((a.child_name) = ('B'))
14/Select children of the class B: SELECT b.id, b.name, b.child_name FROM b
WHERE ((b.id) = (1))
14/QueryR : SELECT b.id, b.name, b.child_name FROM b WHERE ((b.id) = (1))
[<C 1 name='X'>]
No exception.
Oleg.
--
Oleg Broytmann http://phd.pp.ru/ [email protected]
Programmers don't die, they just GOSUB without RETURN.
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
sqlobject-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss