This commit is contained in:
Mike Bayer
2005-10-20 05:33:01 +00:00
parent d988eec735
commit f7f14be319
+60 -3
View File
@@ -100,9 +100,9 @@ users.insert().execute(
addresses = Table('email_addresses', engine,
Column('address_id', INT, primary_key = True),
Column('user_id', INT, ForeignKey(users.c.user_id)),
Column('email_address', VARCHAR(20)),
Column('address_id', Integer, primary_key = True),
Column('user_id', Integer, ForeignKey(users.c.user_id)),
Column('email_address', String(20)),
)
addresses.drop()
addresses.create()
@@ -129,3 +129,60 @@ user.addresses.append(Address('freddy@hi.org'))
# commit
objectstore.commit()
articles = Table('articles', engine,
Column('article_id', Integer, primary_key = True),
Column('article_headline', String(150), key='headline'),
Column('article_body', CLOB, key='body'),
)
keywords = Table('keywords', engine,
Column('keyword_id', Integer, primary_key = True),
Column('name', String(50))
)
itemkeywords = Table('article_keywords', engine,
Column('article_id', Integer, ForeignKey(articles.c.article_id)),
Column('keyword_id', Integer, ForeignKey(keywords.c.keyword_id))
)
articles.create()
keywords.create()
itemkeywords.create()
# class definitions
class Keyword(object):
def __init__(self, name = None):
self.name = name
mapper = assignmapper(keywords)
class Article(object):
def __init__(self):
self.keywords = []
mapper = assignmapper(articles, properties = dict(
keywords = relation(Keyword.mapper, itemkeywords, lazy=False)
))
Article.mapper
article = Article()
article.headline = 'a headline'
article.body = 'this is the body'
article.keywords.append(Keyword('politics'))
article.keywords.append(Keyword('entertainment'))
objectstore.commit()
# select articles based on some keywords. the extra selection criterion
# won't get in the way of the separate eager load of all the article's keywords
alist = Article.mapper.select(sql.and_(keywords.c.keyword_id==articles.c.article_id, keywords.c.name.in_('politics', 'entertainment')))
# modify
a = alist[0]
del a.keywords[:]
a.keywords.append(Keyword('topstories'))
a.keywords.append(Keyword('government'))
# commit. individual INSERT/DELETE operations will take place only for the list
# elements that changed.
objectstore.commit()