]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
fixed the example, because my brain goes blank when i work on that page,
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 23 Oct 2006 23:04:55 +0000 (23:04 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 23 Oct 2006 23:04:55 +0000 (23:04 +0000)
and fixed exceptions raised in sync.py

doc/build/content/datamapping.txt
lib/sqlalchemy/orm/sync.py

index a206ce5d3442b80e2bdf343adfea17c8bde9fe27..f2c20814b9dfa06fe62b018bdb2a830ae13b1f4b 100644 (file)
@@ -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
index 6fe848a6fab6c4146b45c0634e29e33515b7fe75..9de68334b8a5219e1e55b830d7cc65ce01061c43 100644 (file)
@@ -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))