From: Mike Bayer Date: Mon, 23 Oct 2006 23:04:55 +0000 (+0000) Subject: fixed the example, because my brain goes blank when i work on that page, X-Git-Tag: rel_0_3_1~41 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f385aaf39c9a1f1a3d3fe20709611b98290555b;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git fixed the example, because my brain goes blank when i work on that page, and fixed exceptions raised in sync.py --- diff --git a/doc/build/content/datamapping.txt b/doc/build/content/datamapping.txt index a206ce5d34..f2c20814b9 100644 --- a/doc/build/content/datamapping.txt +++ b/doc/build/content/datamapping.txt @@ -743,24 +743,27 @@ Many to Many can also be done with an association object, that adds additional i class KeywordAssociation(object): pass - mapper(User, users_table) - mapper(Keyword, keywords_table) - + # Article mapper, relates to Keyword via KeywordAssociation + mapper(Article, articles_table, properties={ + 'keywords':relation(KeywordAssociation, lazy=False, cascade="all, delete-orphan") + } + ) + # mapper for KeywordAssociation # specify "primary key" columns manually mapper(KeywordAssociation, itemkeywords_table, - primary_key = [itemkeywords_table.c.article_id, itemkeywords_table.c.keyword_id], + primary_key=[itemkeywords_table.c.article_id, itemkeywords_table.c.keyword_id], properties={ - 'keyword' : relation(Keyword, lazy = False), - 'user' : relation(User, lazy = False) + 'keyword' : relation(Keyword, lazy=False), + 'user' : relation(User, lazy=False) } ) + + # user mapper + mapper(User, users_table) - # Article mapper, relates to Keyword via KeywordAssociation - mapper(Article, articles_table, properties={ - 'keywords':relation(KeywordAssociation, lazy=False) - } - ) + # keyword mapper + mapper(Keyword, keywords_table) session = create_session(bind_to=engine) # select by keyword diff --git a/lib/sqlalchemy/orm/sync.py b/lib/sqlalchemy/orm/sync.py index 6fe848a6fa..9de68334b8 100644 --- a/lib/sqlalchemy/orm/sync.py +++ b/lib/sqlalchemy/orm/sync.py @@ -8,7 +8,7 @@ import sqlalchemy.sql as sql import sqlalchemy.schema as schema -from sqlalchemy.exceptions import * +import sqlalchemy.exceptions as exceptions from sqlalchemy import logging import util as mapperutil @@ -54,7 +54,7 @@ class ClauseSynchronizer(object): source_column = binary.right dest_column = binary.left else: - raise ArgumentError("Can't locate a primary key column in self-referential equality clause '%s'" % str(binary)) + raise exceptions.ArgumentError("Can't locate a primary key column in self-referential equality clause '%s'" % str(binary)) # for other relationships we are more flexible # and go off the 'foreignkey' property elif binary.left in foreignkey: @@ -88,7 +88,7 @@ class ClauseSynchronizer(object): processor = BinaryVisitor(compile_binary) sqlclause.accept_visitor(processor) if len(self.syncrules) == rules_added: - raise ArgumentError("No syncrules generated for join criterion " + str(sqlclause)) + raise exceptions.ArgumentError("No syncrules generated for join criterion " + str(sqlclause)) def dest_columns(self): return [r.dest_column for r in self.syncrules if r.dest_column is not None] @@ -137,7 +137,7 @@ class SyncRule(object): dest[self.dest_column.key] = value else: if clearkeys and self.dest_primary_key(): - raise exceptions.AssertionError("Dependency rule tried to blank-out a primary key column") + raise exceptions.AssertionError("Dependency rule tried to blank-out primary key column '%s' on instance '%s'" % (str(self.dest_column), mapperutil.instance_str(dest))) if logging.is_debug_enabled(self.logger): self.logger.debug("execute() instances: %s(%s)->%s(%s) ('%s')" % (mapperutil.instance_str(source), str(self.source_column), mapperutil.instance_str(dest), str(self.dest_column), value))