Add get_referencing_foreign_keys
This commit is contained in:
@@ -4,6 +4,12 @@ Changelog
|
|||||||
Here you can see the full list of changes between each SQLAlchemy-Utils release.
|
Here you can see the full list of changes between each SQLAlchemy-Utils release.
|
||||||
|
|
||||||
|
|
||||||
|
0.25.5 (2014-xx-xx)
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- Added get_referencing_foreign_keys
|
||||||
|
|
||||||
|
|
||||||
0.25.4 (2014-04-22)
|
0.25.4 (2014-04-22)
|
||||||
^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
@@ -28,6 +28,12 @@ get_primary_keys
|
|||||||
.. autofunction:: primary_keys
|
.. autofunction:: primary_keys
|
||||||
|
|
||||||
|
|
||||||
|
get_referencing_foreign_keys
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. autofunction:: get_referencing_foreign_keys
|
||||||
|
|
||||||
|
|
||||||
query_entities
|
query_entities
|
||||||
^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
@@ -13,6 +13,7 @@ from .functions import (
|
|||||||
get_columns,
|
get_columns,
|
||||||
get_declarative_base,
|
get_declarative_base,
|
||||||
get_primary_keys,
|
get_primary_keys,
|
||||||
|
get_referencing_foreign_keys,
|
||||||
identity,
|
identity,
|
||||||
mock_engine,
|
mock_engine,
|
||||||
naturally_equivalent,
|
naturally_equivalent,
|
||||||
@@ -80,6 +81,7 @@ __all__ = (
|
|||||||
get_columns,
|
get_columns,
|
||||||
get_declarative_base,
|
get_declarative_base,
|
||||||
get_primary_keys,
|
get_primary_keys,
|
||||||
|
get_referencing_foreign_keys,
|
||||||
identity,
|
identity,
|
||||||
instrumented_list,
|
instrumented_list,
|
||||||
merge,
|
merge,
|
||||||
|
@@ -15,6 +15,7 @@ from .orm import (
|
|||||||
get_columns,
|
get_columns,
|
||||||
get_declarative_base,
|
get_declarative_base,
|
||||||
get_primary_keys,
|
get_primary_keys,
|
||||||
|
get_referencing_foreign_keys,
|
||||||
getdotattr,
|
getdotattr,
|
||||||
has_changes,
|
has_changes,
|
||||||
identity,
|
identity,
|
||||||
@@ -33,6 +34,7 @@ __all__ = (
|
|||||||
'get_columns',
|
'get_columns',
|
||||||
'get_declarative_base',
|
'get_declarative_base',
|
||||||
'get_primary_keys',
|
'get_primary_keys',
|
||||||
|
'get_referencing_foreign_keys',
|
||||||
'getdotattr',
|
'getdotattr',
|
||||||
'has_changes',
|
'has_changes',
|
||||||
'identity',
|
'identity',
|
||||||
|
@@ -14,6 +14,35 @@ from sqlalchemy.orm.query import _ColumnEntity
|
|||||||
from sqlalchemy.orm.util import AliasedInsp
|
from sqlalchemy.orm.util import AliasedInsp
|
||||||
|
|
||||||
|
|
||||||
|
def get_referencing_foreign_keys(mixed):
|
||||||
|
"""
|
||||||
|
Returns referencing foreign keys for given Table object or declarative
|
||||||
|
class.
|
||||||
|
|
||||||
|
:param mixed:
|
||||||
|
SA Table object or SA declarative class
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
get_foreign_keys(User) # set([ForeignKey('user.id')])
|
||||||
|
"""
|
||||||
|
if isinstance(mixed, sa.Table):
|
||||||
|
tables = [mixed]
|
||||||
|
else:
|
||||||
|
# TODO: make this support joined table inheritance
|
||||||
|
tables = [mixed.__table__]
|
||||||
|
|
||||||
|
referencing_foreign_keys = set()
|
||||||
|
|
||||||
|
for table in mixed.metadata.tables.values():
|
||||||
|
for constraint in table.constraints:
|
||||||
|
if isinstance(constraint, sa.sql.schema.ForeignKeyConstraint):
|
||||||
|
for fk in constraint.elements:
|
||||||
|
if any(fk.references(t) for t in tables):
|
||||||
|
referencing_foreign_keys.add(fk)
|
||||||
|
return referencing_foreign_keys
|
||||||
|
|
||||||
|
|
||||||
def get_primary_keys(mixed):
|
def get_primary_keys(mixed):
|
||||||
"""
|
"""
|
||||||
Return an OrderedDict of all primary keys for given Table object,
|
Return an OrderedDict of all primary keys for given Table object,
|
||||||
|
@@ -38,7 +38,7 @@ class TestCase(object):
|
|||||||
|
|
||||||
def setup_method(self, method):
|
def setup_method(self, method):
|
||||||
self.engine = create_engine(self.dns)
|
self.engine = create_engine(self.dns)
|
||||||
self.engine.echo = True
|
# self.engine.echo = True
|
||||||
self.connection = self.engine.connect()
|
self.connection = self.engine.connect()
|
||||||
self.Base = declarative_base()
|
self.Base = declarative_base()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user