On 9/21/2010 7:23 AM, Michael Bayer wrote:
On Sep 21, 2010, at 8:12 AM, Michael Hipp wrote:
On 9/20/2010 10:54 AM, Michael Hipp wrote:
On 9/20/2010 10:09 AM, Michael Hipp wrote:
On 9/20/2010 9:38 AM, Michael Hipp wrote:
Scratch that ... found this message:
http://www.mail-archive.com/[email protected]/msg18598.html
which says I should be able to do a 'SIMILAR TO' construct which is perhaps
somewhat more lightweight than a full regexp.
Can someone show me what I'm doing wrong here.
letter = 'A[0-9]+'
q = self.session.query(Car).filter_by(hist=False) \
.filter(Car.lane.op('SIMILAR TO') (letter)) \
.order_by(Car.lane)
I'm trying to match something that looks like 'A100'. But it produces a syntax
error:
OperationalError: (OperationalError) near "SIMILAR": syntax error
...snip...
WHERE cars.hist = ? AND (cars.lane SIMILAR TO ?) ORDER BY cars.lane' (False,
'A[0-9]+')
Strange. I couldn't see what was actually wrong with that SQL, so I ran it
directly against pg and it works fine. Is it possibly a quoting problem?
Can anyone offer me some suggestions here? Is this a bug?
I'm not sure how the ? is being used for a bind param. the psycopg2 dialect
uses %(name)s format. SIMILAR TO works fine and you can see %(name)s format
is used:
from sqlalchemy import *
from sqlalchemy.sql import column
e = create_engine('postgresql://scott:ti...@localhost/test', echo=True)
e.execute(select([literal_column("'lane'").op('SIMILAR TO')('car')]))
2010-09-21 08:19:49,339 INFO sqlalchemy.engine.base.Engine.0x...1570 select
version()
2010-09-21 08:19:49,339 INFO sqlalchemy.engine.base.Engine.0x...1570 {}
2010-09-21 08:19:49,341 INFO sqlalchemy.engine.base.Engine.0x...1570 select
current_schema()
2010-09-21 08:19:49,341 INFO sqlalchemy.engine.base.Engine.0x...1570 {}
2010-09-21 08:19:49,343 INFO sqlalchemy.engine.base.Engine.0x...1570 SELECT
'lane' SIMILAR TO %('lane'_1)s AS anon_1
2010-09-21 08:19:49,343 INFO sqlalchemy.engine.base.Engine.0x...1570
{"'lane'_1": 'car'}
I get the same result with psycopg2 2.0.12 and 2.2.2 .
Sigh. I'm a moron.
I'm getting this problem when running unit tests. And it took me a day and a
half to remember that I'm doing that against an SQLite in-memory database, not
pg. Which means the SIMILAR TO op is never going to work, I suppose.
So now I have to figure out how to run unit tests against postgresql or else
live with code having no test coverage. Neither are very attractive.
I apologize for taking your time. Thanks for trying to help.
Michael
--
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.