From b3b3c68a4a0899d2065df36bbb93363f20cebb93 Mon Sep 17 00:00:00 2001 From: Diana Clarke Date: Wed, 27 Jan 2016 22:54:05 -0500 Subject: sqlite: reflect primary key constraint names, fixes #3629 --- lib/sqlalchemy/dialects/sqlite/base.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'lib/sqlalchemy/dialects/sqlite/base.py') diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index 0e048aeff..3ab9022cc 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -1297,12 +1297,21 @@ class SQLiteDialect(default.DefaultDialect): @reflection.cache def get_pk_constraint(self, connection, table_name, schema=None, **kw): + table_data = self._get_table_sql(connection, table_name, schema=schema) + + def parse_pk(): + PK_PATTERN = 'CONSTRAINT (\w+) PRIMARY KEY' + result = re.search(PK_PATTERN, table_data, re.I) + return result.group(1) if result else None + cols = self.get_columns(connection, table_name, schema, **kw) pkeys = [] for col in cols: if col['primary_key']: pkeys.append(col['name']) - return {'constrained_columns': pkeys, 'name': None} + + constraint_name = parse_pk() if table_data else None + return {'constrained_columns': pkeys, 'name': constraint_name} @reflection.cache def get_foreign_keys(self, connection, table_name, schema=None, **kw): -- cgit v1.2.1 From abeb762f885ae59cc05380ec7702680df6fae7ef Mon Sep 17 00:00:00 2001 From: Diana Clarke Date: Thu, 28 Jan 2016 18:55:12 -0500 Subject: same logic, but without the inner function --- lib/sqlalchemy/dialects/sqlite/base.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'lib/sqlalchemy/dialects/sqlite/base.py') diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index 3ab9022cc..da6b9943c 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -1297,12 +1297,12 @@ class SQLiteDialect(default.DefaultDialect): @reflection.cache def get_pk_constraint(self, connection, table_name, schema=None, **kw): + constraint_name = None table_data = self._get_table_sql(connection, table_name, schema=schema) - - def parse_pk(): + if table_data: PK_PATTERN = 'CONSTRAINT (\w+) PRIMARY KEY' result = re.search(PK_PATTERN, table_data, re.I) - return result.group(1) if result else None + constraint_name = result.group(1) if result else None cols = self.get_columns(connection, table_name, schema, **kw) pkeys = [] @@ -1310,7 +1310,6 @@ class SQLiteDialect(default.DefaultDialect): if col['primary_key']: pkeys.append(col['name']) - constraint_name = parse_pk() if table_data else None return {'constrained_columns': pkeys, 'name': constraint_name} @reflection.cache -- cgit v1.2.1