Hi guys.
I'm using sqlalchemy with TurboGears. The code for my project is GPL,
so if you need access to more source just let me know:
I was successfully using the following definition of a
polymorphic_union in 0.3.4::
'''
collectionJoin = polymorphic_union (
{'b' : select((CollectionTable.join(
BranchTable, CollectionTable.c.id ==
BranchTable.c.collectionid),
column("'b'").label('kind'))),
'c' : select((CollectionTable, column("'c'").label('kind')),
not_(CollectionTable.c.id.in_(select(
(CollectionTable.c.id,),
CollectionTable.c.id == BranchTable.c.collectionid)
)))
},
None
)
'''
In 0.3.5, this gives me errors. Inspecting the SQL, it looks like I'm
getting this kind of select now::
SELECT collection.id, "\'c\'" AS kind \nFROM collection
which isn't what I want. I want something more like this::
SELECT collection.id, 'c' AS kind \nFROM collection
I browse the docs and find that literal() is what I want. I try::
'''
select((CollectionTable, literal('c').label('kind')),
not_(CollectionTable.c.id.in_(select(
(CollectionTable.c.id,),
CollectionTable.c.id == BranchTable.c.collectionid)
)))
'''
which works fine as a bare statement. Now I plug this into my
polymorphic union::
'''
collectionJoin = polymorphic_union (
{'b' : select((CollectionTable.join(
BranchTable, CollectionTable.c.id ==
BranchTable.c.collectionid),
literal('b').label('kind'))),
'c' : select((CollectionTable, literal('c').label('kind')),
not_(CollectionTable.c.id.in_(select(
(CollectionTable.c.id,),
CollectionTable.c.id == BranchTable.c.collectionid)
)))
},
None
)
'''
And now I'm getting a different error::
'''
Traceback (most recent call last):
File "/var/www/repo/vanilla-fedora-packagedb/pkgdb/start-pkgdb.py",
line 25, in ?
from pkgdb.controllers import Root
File "/var/www/repo/vanilla-fedora-packagedb/pkgdb/pkgdb/
controllers.py", line 7, in ?
from pkgdb import model
File "/var/www/repo/vanilla-fedora-packagedb/pkgdb/pkgdb/model.py",
line 222, in ?
None
File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/util.py", line
47, in polymorphic_union
for c in table.c:
File "/usr/lib/python2.4/site-packages/sqlalchemy/sql.py", line 779,
in <lambda>
c = property(lambda s:s._get_exported_attribute('_columns'))
File "/usr/lib/python2.4/site-packages/sqlalchemy/sql.py", line 776,
in _get_exported_attribute
self._export_columns()
File "/usr/lib/python2.4/site-packages/sqlalchemy/sql.py", line 801,
in _export_columns
export = self._exportable_columns()
File "/usr/lib/python2.4/site-packages/sqlalchemy/sql.py", line
1226, in _exportable_columns
return self.selectable.columns
File "/usr/lib/python2.4/site-packages/sqlalchemy/sql.py", line 778,
in <lambda>
columns = property(lambda s:s._get_exported_attribute('_columns'))
File "/usr/lib/python2.4/site-packages/sqlalchemy/sql.py", line 776,
in _get_exported_attribute
self._export_columns()
File "/usr/lib/python2.4/site-packages/sqlalchemy/sql.py", line 815,
in _export_columns
for ci in cp.orig_set:
AttributeError: '_BindParamClause' object has no attribute 'orig_set'
'''
Any ideas on how I should construct my polymorphic_union?
Thanks,
-Toshio
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---