From: Mike Bayer Date: Thu, 1 Jun 2006 15:49:58 +0000 (+0000) Subject: fixes half of [ticket:192], query.load()/get() with a unicode argument was failing... X-Git-Tag: rel_0_2_2~19 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c7089aeb47196542697c82799f8c52c79ca036a1;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git fixes half of [ticket:192], query.load()/get() with a unicode argument was failing to apply type conversion to the bind parameter --- diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 64484e4fcb..3af55b7390 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -24,7 +24,7 @@ class Query(object): if not hasattr(mapper, '_get_clause'): _get_clause = sql.and_() for primary_key in self.mapper.pks_by_table[self.table]: - _get_clause.clauses.append(primary_key == sql.bindparam("pk_"+primary_key._label)) + _get_clause.clauses.append(primary_key == sql.bindparam("pk_"+primary_key._label, type=primary_key.type)) self.mapper._get_clause = _get_clause self._get_clause = self.mapper._get_clause def _get_session(self): diff --git a/test/mapper.py b/test/mapper.py index 7e331288e4..10025397ab 100644 --- a/test/mapper.py +++ b/test/mapper.py @@ -84,6 +84,22 @@ class MapperTest(MapperSuperTest): u2 = s.get(User, 7) self.assert_(u is not u2) + def testunicodeget(self): + """tests that Query.get properly sets up the type for the bind parameter. using unicode would normally fail + on postgres, mysql and oracle unless it is converted to an encoded string""" + table = Table('foo', db, + Column('id', Unicode(10), primary_key=True), + Column('data', Unicode(40))) + try: + table.create() + class LocalFoo(object):pass + mapper(LocalFoo, table) + crit = 'petit voix m\xe2\x80\x99a '.decode('utf-8') + print repr(crit) + create_session().query(LocalFoo).get(crit) + finally: + table.drop() + def testrefresh(self): mapper(User, users, properties={'addresses':relation(mapper(Address, addresses))}) s = create_session()