]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
(no commit message)
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 23 Sep 2005 05:53:14 +0000 (05:53 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 23 Sep 2005 05:53:14 +0000 (05:53 +0000)
lib/sqlalchemy/mapper.py
test/rundocs.py

index dc73283450eb48a2f96d16d26c7b5770c9bca764..53f50f64803655b06db70388749d66bcf04ee543 100644 (file)
@@ -47,7 +47,6 @@ class assignmapper(object):
     def __get__(self, instance, owner):
         if not hasattr(self, 'mapper'):
             self.mapper = mapper(owner, self.table, **self.kwargs)
-            print "HI"
             self.mapper._init_class()
             if self.mapper.class_ is not owner:
                 raise "no match " + repr(self.mapper.class_) + " " + repr(owner)
@@ -56,9 +55,12 @@ class assignmapper(object):
         return self.mapper
     
 _mappers = {}
-def mapper(class_, table = None, *args, **params):
+def mapper(class_, table = None, engine = None, autoload = False, *args, **params):
     if table is None:
         return class_mapper(class_)
+
+    if isinstance(table, str):
+        table = schema.Table(table, engine, autoload = autoload, mustexist = not autoload)
             
     hashkey = mapper_hash_key(class_, table, *args, **params)
     #print "HASHKEY: " + hashkey
@@ -595,7 +597,6 @@ class PropertyLoader(MapperProperty):
 
     def match_primaries(self, primary, secondary):
         crit = []
-
         for fk in secondary.foreign_keys:
             if fk.column.table is primary:
                 crit.append(fk.column == fk.parent)
@@ -606,7 +607,7 @@ class PropertyLoader(MapperProperty):
                 self.foreignkey = fk.parent
 
         if len(crit) == 0:
-            raise "Cant find any foreign key relationships between " + primary.table.name + " and " + secondary.table.name
+            raise "Cant find any foreign key relationships between '%s' (%s) and '%s' (%s)" % (primary.table.name, repr(primary.table), secondary.table.name, repr(secondary.table))
         elif len(crit) == 1:
             return (crit[0])
         else:
@@ -641,6 +642,7 @@ class PropertyLoader(MapperProperty):
         elif self.foreignkey.table == self.parent.primarytable:
             uowcommit.register_dependency(self.mapper, self.parent)
             uowcommit.register_task(self.mapper, False, self, self.parent, False)
+            # TODO: private deletion thing for one-to-one relationship
             #uowcommit.register_task(self.mapper, True, self, self.parent, False)
         else:
             raise " no foreign key ?"
index 0db9cdce41fe416e251d60eca9faff4b86d0d2dc..bb0e9935f6e5e7009012af53d57547a1e0193239 100644 (file)
@@ -21,12 +21,10 @@ users.insert().execute(
 class User(object):
     def __init__(self):
         pass
-    
-# obtain a Mapper
-m = mapper(User, users)
-
+    mapper = assignmapper(users)
+  
 # select
-user = m.select(users.c.user_name == 'fred')[0]      
+user = User.mapper.select(User.c.user_name == 'fred')[0]      
 
 
 # modify
@@ -52,10 +50,12 @@ class Address(object):
     def __init__(self, email_address = None):
         self.email_address = email_address
 
+    mapper = assignmapper(addresses)
+    
 # obtain a Mapper.  "private=True" means deletions of the user
 # will cascade down to the child Address objects
-m = mapper(User, users, properties = dict(
-    addresses = relation(Address, addresses, lazy=True, private=True)
+User.mapper = assignmapper(User, users, properties = dict(
+    addresses = relation(Address.mapper, lazy=True, private=True)
 ))
 
 # select