I would like to convert this query to SQLAlchemy:
SELECT revision_id, modulename, content
FROM content
WHERE revision_id IN (
SELECT MAX(revision_id) FROM content c
GROUP BY modulename
)
AND content != ''
ORDER BY modulename
with this table:
CREATE TABLE content (
revision_id INTEGER NOT NULL,
modulename VARCHAR(256),
content VARCHAR(102400),
summary VARCHAR(256),
created TIMESTAMP,
PRIMARY KEY (revision_id)
)
or:
class Content(DeclarativeBase):
__tablename__ = 'content'
revision_id = Column(Integer, primary_key=True)
modulename = Column(Unicode(256))
content = Column(Unicode(102400), default='')
summary = Column(Unicode(256))
users = relation(User, secondary=ContentUser.__table__,
backref='content')
created = Column(DateTime, default=datetime.now)
I had a go at it myself and heres what I managed to do:
revision_ids = DBSession.query(func.max(Content.revision_id)).group_by
(
Content.modulename).subquery()
pages = DBSession.query(Content.modulename, Content.revision_id,
Content.content).filter(and_(
Content.revision_id.in_(revision_ids),
Content.content != '')).order_by(
Content.modulename)
It worked (as in does not error out) if I remove .subquery() but then
pages does not work as expected, I think I need to use a subquery to
make it work 100%.
Heres the error:
OperationalError: (OperationalError) near SELECT: syntax error
u'SELECT content.modulename AS content_modulename, content.revision_id
AS content_revision_id, content.content AS content_content \nFROM
content, (SELECT max(content.revision_id) AS max_1 \nFROM content
GROUP BY content.modulename) AS anon_1 \nWHERE content.revision_id IN
SELECT max(content.revision_id) AS max_1 \nFROM content GROUP BY
content.modulename AND content.content != ? ORDER BY
content.modulename' ['']
There is a forum thread on my favorable forum where I asked how to
design the query, as I got a bit stuck on the theory behind such a
complex query. This should give you a idea of what I am trying to
achieve.
http://forums.overclockers.co.uk/showthread.php?t=18050830
Thanks alot for your help :)
--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---