Hi,

I'm using SQLAlchemy (0.7.4) with GeoAlchemy to map tables containing 
geographic entities from a PostgreSQL/PostGIS database.

As I have to handle data from several parts of the world, each part using 
it's own geographic projection, my testing model which I'll try to describe 
is based on:
- a parent class ("TestIMG"), containing common attributes and a shape in 
"world-wide" WGS84 coordinates system
- for each projection system, a child class, inheriting from TestIMG and 
containing only the shapes in the given projection system.
TestIMG can be seen as an abstract class; discrimination between child 
classes is based on a common "SRID" attribute.

I've mapped my classes as follow:

class TestIMG(Base):
    __tablename__ = 'test_img'
    id = Column('id', Integer, primary_key=True)
    data = Column('data', Unicode(20))
    wgs_shape = GeometryColumn('wgs_shape', Point(srid=4326))
    srid = Column('srid', Integer)
    __mapper_args__ = { 'concrete': False,
                        'polymorphic_on': srid }

class TestIMG_france(TestIMG):
    __tablename__ = 'test_img_france'
    __mapper_args__ = { 'polymorphic_identity': 2154,
                        'concrete': True }
    id = Column('id', Integer, ForeignKey(TestIMG.id), primary_key=True)
    shape = GeometryColumn('shape', Point(srid=2154))

class TestIMG_guyane(TestIMG):
    __tablename__ = 'test_img_guyane'
    __mapper_args__ = { 'polymorphic_identity': 32622,
                        'concrete': True }
    id = Column('id', Integer, ForeignKey(TestIMG.id), primary_key=True)
    shape = GeometryColumn('shape', Point(srid=32622))

TestIMG_union = polymorphic_union({ 'test_img_france': 
TestIMG_france.__table__,
                                    'test_img_guyane': 
TestIMG_guyane.__table__ },
                                  'projection', 'test_img')


When I make a query in a child class, everything is OK; but when I try to 
query the main class, I get an error:

>>> session.query(TestIMG).all()

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File 
"/var/local/eggs/SQLAlchemy-0.7.4-py2.7-linux-x86_64.egg/sqlalchemy/orm/query.py",
 
line 1947, in all
    return list(self)
  File 
"/var/local/eggs/SQLAlchemy-0.7.4-py2.7-linux-x86_64.egg/sqlalchemy/orm/query.py",
 
line 2178, in instances
    rows = [process[0](row, None) for row in fetch]
  File 
"/var/local/eggs/SQLAlchemy-0.7.4-py2.7-linux-x86_64.egg/sqlalchemy/orm/mapper.py",
 
line 2614, in _instance
    return _instance(row, result)
  File 
"/var/local/eggs/SQLAlchemy-0.7.4-py2.7-linux-x86_64.egg/sqlalchemy/orm/mapper.py",
 
line 2627, in _instance
    tuple([row[column] for column in pk_cols])
  File 
"/var/local/eggs/SQLAlchemy-0.7.4-py2.7-linux-x86_64.egg/sqlalchemy/engine/base.py",
 
line 2654, in _key_fallback
    expression._string_or_unprintable(key))
NoSuchColumnError: "Could not locate column in row for column 
'test_img_france.id'"


I've tried to test several configurations but everything fails until now.
I'll also add that I **have to** use declarative form of SQLAlchemy, 
because GeoAlchemy doesn't seem to handle anything else :-/

Any help would be greatly welcome !

Best regards,
Thierry

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/sqlalchemy/-/mbMu9ozxiAsJ.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to