trip over synonyms (and others) that are named after the column's actual
"key" (since, column_prefix means "dont use the key").
- sql
+ - ForeignKey to a table in a schema thats not the default schema
+ requires the schema to be explicit; i.e. ForeignKey('alt_schema.users.id')
- MetaData can now be constructed with an engine or url as the first
argument, just like BoundMetaData
- BoundMetaData is now deprecated, and MetaData is a direct substitute.
- added support for reflection of domains [ticket:570]
- types which are missing during reflection resolve to Null type
instead of raising an error
+ - the fix in "schema" above fixes reflection of foreign keys from an
+ alt-schema table to a public schema table
- sqlite
- sqlite better handles datetime/date/time objects mixed and matched
with various Date/Time/DateTime columns
raise exceptions.ArgumentError("Invalid foreign key column specification: " + self._colspec)
if m.group(3) is None:
(tname, colname) = m.group(1, 2)
- schema = parenttable.schema
+ schema = None
else:
(schema,tname,colname) = m.group(1,2,3)
table = Table(tname, parenttable.metadata, mustexist=True, schema=schema)
finally:
meta1.drop_all()
+ @testbase.supported('postgres')
+ def test_schema_reflection_2(self):
+ meta1 = MetaData(testbase.db)
+ subject = Table("subject", meta1,
+ Column("id", Integer, primary_key=True),
+ )
+
+ referer = Table("referer", meta1,
+ Column("id", Integer, primary_key=True),
+ Column("ref", Integer, ForeignKey('subject.id')),
+ schema="alt_schema")
+ meta1.create_all()
+ try:
+ meta2 = MetaData(testbase.db)
+ subject = Table("subject", meta2, autoload=True)
+ referer = Table("referer", meta2, schema="alt_schema", autoload=True)
+ print str(subject.join(referer).onclause)
+ self.assert_((subject.c.id==referer.c.ref).compare(subject.join(referer).onclause))
+ finally:
+ meta1.drop_all()
+
+ @testbase.supported('postgres')
+ def test_schema_reflection_3(self):
+ meta1 = MetaData(testbase.db)
+ subject = Table("subject", meta1,
+ Column("id", Integer, primary_key=True),
+ schema='alt_schema_2'
+ )
+
+ referer = Table("referer", meta1,
+ Column("id", Integer, primary_key=True),
+ Column("ref", Integer, ForeignKey('alt_schema_2.subject.id')),
+ schema="alt_schema")
+
+ meta1.create_all()
+ try:
+ meta2 = MetaData(testbase.db)
+ subject = Table("subject", meta2, autoload=True, schema="alt_schema_2")
+ referer = Table("referer", meta2, schema="alt_schema", autoload=True)
+ print str(subject.join(referer).onclause)
+ self.assert_((subject.c.id==referer.c.ref).compare(subject.join(referer).onclause))
+ finally:
+ meta1.drop_all()
+
@testbase.supported('postgres')
def test_preexecute_passivedefault(self):
"""test that when we get a primary key column back