summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2020-10-26 14:29:12 +0000
committerGerrit Code Review <gerrit@bbpush.zzzcomputing.com>2020-10-26 14:29:12 +0000
commit8d588b06d984cb053be53e779cfa11b1d5166f03 (patch)
treed3b0ed94f321eda4a0a14000ebe99c60c5984fa0 /lib/sqlalchemy/dialects
parenta1c51879aeb7811a23e454d2e90ad3bbae92b7a1 (diff)
parent7937a409f9e685341b6a5b8385491befe0aaa4d4 (diff)
downloadsqlalchemy-8d588b06d984cb053be53e779cfa11b1d5166f03.tar.gz
Merge "Correct reflection for composite primary keys"
Diffstat (limited to 'lib/sqlalchemy/dialects')
-rw-r--r--lib/sqlalchemy/dialects/mssql/base.py22
-rw-r--r--lib/sqlalchemy/dialects/sqlite/base.py1
2 files changed, 14 insertions, 9 deletions
diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py
index c8f2b4ca3..a224c00bb 100644
--- a/lib/sqlalchemy/dialects/mssql/base.py
+++ b/lib/sqlalchemy/dialects/mssql/base.py
@@ -3168,15 +3168,19 @@ class MSDialect(default.DefaultDialect):
C = ischema.key_constraints.alias("C")
# Primary key constraints
- s = sql.select(
- C.c.column_name, TC.c.constraint_type, C.c.constraint_name
- ).where(
- sql.and_(
- TC.c.constraint_name == C.c.constraint_name,
- TC.c.table_schema == C.c.table_schema,
- C.c.table_name == tablename,
- C.c.table_schema == owner,
- ),
+ s = (
+ sql.select(
+ C.c.column_name, TC.c.constraint_type, C.c.constraint_name
+ )
+ .where(
+ sql.and_(
+ TC.c.constraint_name == C.c.constraint_name,
+ TC.c.table_schema == C.c.table_schema,
+ C.c.table_name == tablename,
+ C.c.table_schema == owner,
+ ),
+ )
+ .order_by(TC.c.constraint_name, C.c.ordinal_position)
)
c = connection.execution_options(future_result=True).execute(s)
constraint_name = None
diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py
index 8ef35514a..8a4fbe8e5 100644
--- a/lib/sqlalchemy/dialects/sqlite/base.py
+++ b/lib/sqlalchemy/dialects/sqlite/base.py
@@ -1853,6 +1853,7 @@ class SQLiteDialect(default.DefaultDialect):
constraint_name = result.group(1) if result else None
cols = self.get_columns(connection, table_name, schema, **kw)
+ cols.sort(key=lambda col: col.get("primary_key"))
pkeys = []
for col in cols:
if col["primary_key"]: