Some more testing...
- Note, I'm just trying to get the joins working before using the queries with
session etc
>>> m = db.devmap_manufacturer
>>> d = db.devmap_device
>>> d.join(m).first()
MappedDevmap_device(id=1,device_name='otc701',manufacturer_id=1)
>>> m = db.with_labels(db.devmap_manufacturer)
>>> d = db.with_labels(db.devmap_device)
>>> d.join(m)
<sqlalchemy.orm.query.Query object at 0x00F949D0
>>> d.join(m).first()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\orm\query.py",
line 1219, in first
ret = list(self[0:1])
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\orm\query.py",
line 1140, in __getitem__
return list(res)
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\orm\query.py",
line 1280, in __iter__
return self._execute_and_instances(context)
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\orm\query.py",
line 1283, in _execute_and_in
stances
result = self.session.execute(querycontext.statement, params=self._params,
mapper=self._mapper_zero_or_none())
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\orm\session.py",
line 755, in execute
clause, params or {})
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\engine\base.py",
line 824, in execute
return Connection.executors[c](self, object, multiparams, params)
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\engine\base.py",
line 874, in _execute_claus
eelement
return self.__execute_context(context)
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\engine\base.py",
line 896, in __execute_cont
ext
self._cursor_execute(context.cursor, context.statement,
context.parameters[0], context=context)
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\engine\base.py",
line 950, in _cursor_execut
e
self._handle_dbapi_exception(e, statement, parameters, cursor, context)
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\engine\base.py",
line 931, in _handle_dbapi_
exception
raise exc.DBAPIError.instance(statement, parameters, e,
connection_invalidated=is_disconnect)
sqlalchemy.exc.ProgrammingError: (ProgrammingError) table name "foo" specified
more than once
'SELECT foo.devmap_device_id AS foo_devmap_device_id,
foo.devmap_device_device_name AS foo_devmap_device_device_name, f
oo.devmap_device_manufacturer_id AS foo_devmap_device_manufacturer_id \nFROM
(SELECT devmap_device.id AS devmap_device_i
d, devmap_device.device_name AS devmap_device_device_name,
devmap_device.manufacturer_id AS devmap_device_manufacturer_i
d \nFROM devmap_device) AS foo JOIN (SELECT devmap_manufacturer.id AS
devmap_manufacturer_id, devmap_manufacturer.manufa
cturer_name AS devmap_manufacturer_manufacturer_name \nFROM
devmap_manufacturer) AS foo ON foo.devmap_manufacturer_id =
foo.devmap_device_manufacturer_id \n LIMIT 1 OFFSET 0' {}
>>>
Tried pasting the SQL into psql and it basically says the same thing...
ERROR: table name "foo" specified more than once
********** Error **********
ERROR: table name "foo" specified more than once
SQL state: 42712
I'm trying to do the equivilent of this query, but it seems insanely difficult
to get it working:
select
manufacturer_name, device_name
from
devmap_device
join
devmap_manufacturer
on
manufacturer_id = devmap_manufacturer.id
where
manufacturer_name = 'chockia'
and
device_name = '8210'
----- Original Message ----
From: Stuart Axon <[email protected]>
To: [email protected]
Sent: Thursday, February 12, 2009 3:41:39 PM
Subject: [sqlalchemy] sqlsoup + with_labels not working on one table?
I've got a fairly simple database made with django and accessed via sqlsoup.
(finally got some time to take more of a look at the tutorial, which helped a
little :)
The two tables are
devmap_device
id
device_name
manufacturer_id
devmap_manufacturer
id
manufacturer_name
I tried to make a join to retrieve a device/manufacturer...
>>> from db import devmap_device, devmap_manufacturer
>>>
>>> e = create_engine('postgres://user:[email protected]/xxxx')
>>> db = SqlSoup(MetaData(e))
>>>
>>> db.devmap_device.join(db.devmap_manufacturer,
>>> db.devmap_device.manufacturer_id == db.devmap_manufacturer.id).first()
>>>
### At this point it says:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <lambda>
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\util.py",
line 212, in go
return fn(*args, **kw)
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\orm\query.py",
line 873, in join
return self.__join(props, outerjoin=False, create_aliases=aliased,
from_joinpoint=from_joinpoint)
File "<string>", line 1, in <lambda>
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\orm\query.py",
line 52, in generate
fn(self, *args[1:], **kw)
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\orm\query.py",
line 1071, in __join
clause = orm_join(clause, right_entity, onclause, isouter=outerjoin,
join_to_left=join_to_left)
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\orm\util.py",
line 432, in join
return _ORMJoin(left, right, onclause, isouter, join_to_left)
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\orm\util.py",
line 409, in __init__
expression.Join.__init__(self, left, right, onclause, isouter)
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\sql\expression.py",
line 2479, in __init__
self.right = _selectable(right).self_group()
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\sql\expression.py",
line 968, in _selectable
raise exc.ArgumentError("Object %r is not a Selectable and does not
implement `__selectable__()`" % element)
sqlalchemy.exc.ArgumentError: Object
<sqlalchemy.sql.expression._BinaryExpression object at 0x00FAB4B0> is not a
Selecta
ble and does not implement `__selectable__()`
###
Also, if I try
>>> db.with_labels(db.devmap_manufacturer)
It says:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\ext\sqlsoup.py",
line 534, in with_labels
return
self.map(expression._selectable(item).select(use_labels=True).alias('foo'))
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\ext\sqlsoup.py",
line 528, in map
t = class_for_table(selectable, **kwargs)
File
"c:\python25\lib\site-packages\SQLAlchemy-0.5.2-py2.5.egg\sqlalchemy\ext\sqlsoup.py",
line 448, in class_for_tabl
e
engine_encoding = selectable.metadata.bind.dialect.encoding
AttributeError: 'Alias' object has no attribute 'metadata'
...which seems strange as
>>> db.with_labels(db.devmap_device)
works fine !
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---