From f41cb14668dd2f6879e60343592418ba5469fc7b Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 23 Sep 2005 05:53:14 +0000 Subject: [PATCH] --- lib/sqlalchemy/mapper.py | 10 ++++++---- test/rundocs.py | 14 +++++++------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/sqlalchemy/mapper.py b/lib/sqlalchemy/mapper.py index dc73283450..53f50f6480 100644 --- a/lib/sqlalchemy/mapper.py +++ b/lib/sqlalchemy/mapper.py @@ -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 ?" diff --git a/test/rundocs.py b/test/rundocs.py index 0db9cdce41..bb0e9935f6 100644 --- a/test/rundocs.py +++ b/test/rundocs.py @@ -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 -- 2.47.2