unicode type conversion of bind variables

Issue #225 resolved
Former user created an issue

as in #192 the type conversion of bind variables is not made in the following case

first mapper

addresses = sqlalchemy.Table(
    'addresses',z3c.zalchemy.metadata,
    sqlalchemy.Column('userName', sqlalchemy.Unicode,
                      sqlalchemy.ForeignKey('members.userName'),
                      primary_key=True,
                      nullable=False),
    sqlalchemy.Column('addressType', sqlalchemy.Integer,
                      nullable=False,
                      primary_key=True),
    sqlalchemy.Column('organisation', sqlalchemy.Unicode),
    sqlalchemy.Column('address', sqlalchemy.Unicode),
    sqlalchemy.Column('zipCode', sqlalchemy.Unicode),
    sqlalchemy.Column('city', sqlalchemy.Unicode),
    sqlalchemy.Column('state', sqlalchemy.Unicode, default=u'AT'),
    sqlalchemy.Column('email', sqlalchemy.Unicode),
    sqlalchemy.Column('phone', sqlalchemy.Unicode),
    sqlalchemy.Column('homePage', sqlalchemy.Unicode),
    sqlalchemy.Column('isContact', sqlalchemy.Boolean),
    )

second mapper

sqlalchemy.mapper(Member,members,properties={
    '_personalAddress':sqlalchemy.relation(AddressInfo,
                                    uselist=False,
                                    backref='__parent__',
                                    private=True,
                                    foreignkey=addresses.c.userName,
                                    primaryjoin=sqlalchemy.and_(
    members.c.userName==addresses.c.userName, 
    addresses.c.addressType==1
    )),
    '_orgAddress':sqlalchemy.relation(AddressInfo,
                                      uselist=False,
                                      backref='__parent__',
                                      private=True,
                                      foreignkey=addresses.c.userName,
                                      primaryjoin=sqlalchemy.and_(
    members.c.userName==addresses.c.userName, 
    addresses.c.addressType==2
    )),
    })

the this traceback when accessing _personalAddress

2006-06-27T14:10:10 ERROR SiteError http://localhost:8080/++skin++FHVAO/portal/members/bd/@@editAddress.html
Traceback (most recent call last):
  File "/Users/bd/zsandbox/trunk/src/zope/publisher/publish.py", line 133, in publish
    result = publication.callObject(request, obj)
  File "/Users/bd/zsandbox/trunk/src/zope/app/publication/zopepublication.py", line 161, in callObject
    return mapply(ob, request.getPositionalArguments(), request)
  File "/Users/bd/zsandbox/trunk/src/zope/publisher/publish.py", line 108, in mapply
    return debug_call(obj, args)
  File "/Users/bd/zsandbox/trunk/src/zope/publisher/publish.py", line 114, in debug_call
    return obj(*args)
  File "/Users/bd/zsandbox/trunk/src/zope/formlib/form.py", line 757, in __call__
    self.update()
  File "/Users/bd/zsandbox/trunk/src/zope/formlib/form.py", line 720, in update
    self.setUpWidgets()
  File "/Users/bd/zsandbox/trunk/src/zope/formlib/form.py", line 797, in setUpWidgets
    adapters=self.adapters, ignore_request=ignore_request
  File "/Users/bd/zsandbox/trunk/src/zope/formlib/form.py", line 356, in setUpEditWidgets
    adapter = interface(context)
  File "/Users/bd/zsandbox/trunk/src/zope/app/component/hooks.py", line 96, in adapter_hook
    return siteinfo.adapter_hook(interface, object, name, default)
  File "/Users/bd/zopes/fhvao/lib/python/fhvao/member.py", line 29, in memberPersonalAddress
    return member.personalAddress
  File "/Users/bd/zopes/fhvao/lib/python/fhvao/member.py", line 128, in fget
    return self._personalAddress
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/attributes.py", line 29, in __get__
    return self.get(obj)
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/attributes.py", line 145, in get
    obj.__dict__[self.key](self.key) = callable_()
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/orm/properties.py", line 388, in lazyload
    result = self.mapper.using(session).select_whereclause(self.lazywhere, order_by=order_by, params=params)
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/orm/query.py", line 225, in select_whereclause
    return self._select_statement(statement, params=params)
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/orm/query.py", line 295, in _select_statement
    return self.instances(statement, params=params, **kwargs)
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/orm/query.py", line 257, in instances
    result = self.session.execute(self.mapper, clauseelement, params=params)
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/orm/session.py", line 114, in execute
    return self.connection(mapper, close_with_result=True).execute(clause, params, **kwargs)
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/engine/base.py", line 240, in execute
    return Connection.executors[type(object).__mro__[-2](type(object).__mro__[-2)](self, object, *multiparams, **params)
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/engine/base.py", line 264, in execute_clauseelement
    return self.execute_compiled(elem.compile(engine=self.__engine, parameters=param), *multiparams, **params)
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/engine/base.py", line 280, in execute_compiled
    proxy(str(compiled), parameters)
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/engine/base.py", line 276, in proxy
    self._execute_raw(statement, parameters, cursor=cursor, context=context)
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/engine/base.py", line 315, in _execute_raw
    self._execute(cursor, statement, parameters, context=context)
  File "/Users/bd/zopes/fhvao/lib/python/sqlalchemy/engine/base.py", line 334, in _execute
    raise exceptions.SQLError(statement, parameters, e)
SQLError: (NotSupportedError) Variable_TypeByValue(): unhandled data type unicode 'SELECT addresses.userName AS addresses_userName, addresses.city AS addresses_city, addresses.addressType AS addresses_addressType, addresses.isContact AS addresses_isContact, addresses.organisation AS addresses_organisation, addresses.zipCode AS addresses_zipCode, addresses.phone AS addresses_phone, addresses.state AS addresses_state, addresses.address AS addresses_address, addresses.homePage AS addresses_homePage, addresses.email AS addresses_email \nFROM addresses \nWHERE :lazy_2e8f = addresses.userName AND addresses.addressType = :addresses_addressType ORDER BY addresses.rowid' {'addresses_addressType': 1, 'lazy_2e8f': u'bd'}

Comments (1)

  1. Log in to comment