On Thursday 30 July 2009 01:31:21 pm Michael Bayer wrote:
> oh, its the string. OK so dont do ForeignKeyConstraint, but definitely
> add to the Invoice.BillingInfo relation() all the information needed
> within the primaryjoin to select the correct row. seems like it would be
> (pseudocode) "invoice.pay2addrid=billing.pay2addrid AND
> invoice.custinfo=select(customer.stringname).where(customer.id==billing.cus
>tid)". The subquery should work and I don't see another way to get around
> that.
Going down that road, I tried:
class Invoice(Base):
__tablename__ = 'invoice'
__table_args__ = dict(schema='fro')
# Each invoice has a unique invid
invid = Column(Integer, primary_key=True)
# This is the name of the customer on this invoice
customer = Column('xrscust', String(10), ForeignKey('fro.xrscust.xrscust'))
# Some customers have multiple payment addresses, so point to the
# one used for this specific invoice
pay2addrid = Column(Integer, ForeignKey('fro.bllginfo.pay2addrid'))
BillingInfo = relation('BillingInfo',
primaryjoin="and_(Invoice.pay2addrid==BillingInfo.pay2addrid,Invoice.customer==select(Customer.customer).where(Customer.xrscustid==BillingInfo.xrscustid))")
but ended up with:
$ ./satest.py
Traceback (most recent call last):
File "./satest.py", line 67, in <module>
invoices = session.query(Invoice)
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/orm/session.py", line
895, in query
return self._query_cls(entities, self, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/orm/query.py", line
91, in __init__
self._set_entities(entities)
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/orm/query.py", line
100, in _set_entities
self.__setup_aliasizers(self._entities)
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/orm/query.py", line
114, in __setup_aliasizers
mapper, selectable, is_aliased_class = _entity_info(entity)
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/orm/util.py", line
492, in _entity_info
mapper = class_mapper(entity, compile)
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/orm/util.py", line
567, in class_mapper
mapper = mapper.compile()
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/orm/mapper.py", line
658, in compile
mapper._post_configure_properties()
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/orm/mapper.py", line
687, in _post_configure_properties
prop.init()
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/orm/interfaces.py",
line 408, in init
self.do_init()
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/orm/properties.py",
line 712, in do_init
self._process_dependent_arguments()
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/orm/properties.py",
line 739, in _process_dependent_arguments
setattr(self, attr, getattr(self, attr)())
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/ext/declarative.py",
line 596, in return_cls
x = eval(arg, globals(), d)
File "<string>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/sql/expression.py",
line 246, in select
s = Select(columns, whereclause=whereclause, from_obj=from_obj, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/sqlalchemy/sql/expression.py",
line 3239, in __init__
[_literal_as_column(c) for c in columns]
TypeError: 'Column' object is not iterable
Any idea where I might start digging into that?
--
Kirk Strauser
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---