Jeff Watkins wrote:

What I'm looking for specifically (and what I really enjoyed in Hibernate, which in my book sets the standard for ORMs if you hadn't already guessed) was something like the following:

ImagePlacements
---------------
article_id: Article
image_id: Image
source_name: String

This would allow me to have the following in my data model:

a= Article.get(1)
mainImage= a.imagePlacements["main"]
featureImage= a.imagePlacements["feature"]

This simply can't be done with SQLObject today.

Sure it can. It requires programming. Programming is okay; we're all programmers, right? Not everything needs to be declarative.

class Article(SQLObject):

    def imagePlacements(self, name):
res = list(ImagePlacements.selectBy(article=self, source_name=name))
        assert len(res) == 1
        return res[0].image

Well, that's not ['main'], but instead ('main'). Implementing the full dictionary interface would be nice, but a bit more work (not much, UserDict.DictMixin handles most of the methods). I'd like SelectResults instances (what selectBy returns) to have a getOne() method too, which would handle the assert and whatnot.

A join along these lines would be okay to have; I don't want to bring in *every* possible case as a declarative construct, but there's certainly room for a few more. The API might be:

imagePlacements = joins.MappingJoin('ImagePlacements', keyColumn='sourceName', resultColumn='image')


--
Ian Bicking  /  [EMAIL PROTECTED]  /  http://blog.ianbicking.org

Reply via email to