That's SQLite's lower() function.   If you'd like to use Python's lower() 
function, you should call lower() on the string and use 
column.like(mystring.lower()).  But that won't do case-insensitive comparison 
since you need to call lower() on the database column in the statement.

So you really need to first get this statement to work with pysqlite, to figure 
out what collation issues may exist with sqlite3 or encoding issues with 
pysqlite:

import sqlite3

connection = sqlite3.connect("/path/to/your/db")

cursor = connection.cursor()
cursor.execute("SELECT * FROM patients WHERE lower(lastname) LIKE lower(?)", 
['Ivanov'])
print cursor.fetchall()

SQLAlchemy doesn't look at the contents of your string at all with pysqlite, 
its a pass through.   



On Jan 20, 2011, at 4:15 PM, proft wrote:

> Hello!
> 
> I have gtk application with sqlite db, contain russian words.
> 
> My model
> 
> <code>
> class Patient(Base):
>    lastname = Column(Unicode)
> </code>
> 
> Search operation
> 
> <code>
> patients = self.session.query(Patient)
> 
> lastname = unicode(self.lastname_entry.get_text())
> if lastname:
>     patients = patients.filter(Patient.lastname.like(u"%%%s%%" %
> lastname))
> </code>
> 
> It perfectly work if i search as 'Ivanov', but didn't return results
> if i search 'ivanov'. Note, i search russian words, not english.
> 
> In SQLite manager (firefox plugin) search query
> 
> <code>
> SELECT * FROM patients WHERE lastname LIKE "%ivanov%"
> </code>
> 
> If i query db and look at value:
> 
> <code>
> In [28]: p.lastname
> Out[28]: u'\u0413\u0430\u043f\u0447\u0443\u043a'
> </code>
> 
> and than check it in query, generated by SQLAlchemy
> 
> <code>
> In [29]: patients.filter(Patient.lastname.ilike(u"%%%s%%" %
> l.decode('utf-8'))).count()
> 
> 2011-01-20 21:20:30,950 INFO sqlalchemy.engine.base.Engine.0x...1250
> SELECT count(1) AS count_1
> FROM patients
> WHERE lower(patients.lastname) LIKE lower(?)
> 2011-01-20 21:20:30,950 INFO sqlalchemy.engine.base.Engine.0x...1250
> (u'%\u0433\u0430\u043f\u0447\u0443\u043a%',)
> Out[29]: 0
> </code>
> 
> It is looked like lower function in SQLAlchemy didn't understood
> cyrillic ...
> 
> Thanks!
> 
> PS: Sorry for my english)
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> 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.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
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