From 6ea7729bbb7f21cd890a4e125f6482978efcb86d Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 5 Jan 2006 04:00:21 +0000 Subject: [PATCH] added support for foreign keys to work across schemas --- lib/sqlalchemy/schema.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index c726bd2f0f..c5054cd500 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -315,7 +315,8 @@ class ForeignKey(SchemaItem): def __init__(self, column): """Constructs a new ForeignKey object. "column" can be a schema.Column object representing the relationship, or just its string name given as - "tablename.columnname".""" + "tablename.columnname". schema can be specified as + "schemaname.tablename.columnname" """ self._colspec = column self._column = None @@ -341,11 +342,16 @@ class ForeignKey(SchemaItem): # be defined without dependencies if self._column is None: if isinstance(self._colspec, str): - m = re.match(r"([\w_-]+)(?:\.([\w_-]+))?", self._colspec) + m = re.match(r"^([\w_-]+)(?:\.([\w_-]+))?(?:\.([\w_-]+))?$", self._colspec) if m is None: - raise "Invalid foreign key column specification: " + self._colspec - (tname, colname) = m.group(1, 2) - table = Table(tname, self.parent.engine, mustexist = True) + raise ValueError("Invalid foreign key column specification: " + self._colspec) + if m.group(3) is None: + (tname, colname) = m.group(1, 2) + # default to containing table's schema + schema = self.parent.table.schema + else: + (schema,tname,colname) = m.group(1,2,3) + table = Table(tname, self.parent.engine, mustexist=True, schema=schema) if colname is None: key = self.parent self._column = table.c[self.parent.key] -- 2.47.2