sql server self-referential FK repeated in multple schemas doubles columns up

Issue #4060 resolved
Mike Bayer repo owner created an issue
from sqlalchemy import *

e = create_engine("mssql+pymssql://scott:tiger^5HHH@mssql2017:1433/test", echo=True)

metadata = MetaData()

users = Table(
    'users', metadata,
    Column('user_id', Integer, primary_key=True),
    Column('parent_user_id', Integer,
         ForeignKey('users.user_id',
                       name='user_id_fk')),
)

users = Table(
    'users', metadata,
    Column('user_id', Integer, primary_key=True),
    Column('parent_user_id', Integer,
         ForeignKey('test_schema.users.user_id',
                       name='user_id_fk')),
    schema="test_schema",
)

metadata.create_all(e)

insp = inspect(e)

print insp.get_foreign_keys("users", schema="test_schema")

output:

[{'referred_table': u'users', 'referred_columns': [u'user_id', u'user_id'], 'referred_schema': u'scott', 'name': u'user_id_fk', 'constrained_columns': [u'parent_user_id', u'parent_user_id']}]

this has to do with the join of key_constraints to itself, needs to include table_schema.

Comments (1)

  1. Mike Bayer reporter

    Join key_constraints on schema as well for SQL server get_fks

    Fixed bug where the SQL Server dialect could pull columns from multiple schemas when reflecting a self-referential foreign key constraint, if multiple schemas contained a constraint of the same name against a table of the same name.

    Tests are part of standard suite already (CI has been disabled)

    Change-Id: I04ff4a5dea9b82c8e517b3700a28fe994b5550f3 Fixes: #4060

    → <<cset 43447c4254f0>>

  2. Log in to comment