summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2016-03-30 16:25:41 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2016-03-30 16:25:41 -0400
commite6cbf44d6dd7992daad940f60833735362518bfa (patch)
treeb117e0a8170b7f83e8b4f08531a145d6000aa426
parent9bdbf19d54174c1077689bc472dc088c9b06aa24 (diff)
parentabeb762f885ae59cc05380ec7702680df6fae7ef (diff)
downloadsqlalchemy-e6cbf44d6dd7992daad940f60833735362518bfa.tar.gz
Merge remote-tracking branch 'origin/pr/230'
-rw-r--r--lib/sqlalchemy/dialects/sqlite/base.py10
-rw-r--r--test/dialect/test_sqlite.py37
-rw-r--r--test/requirements.py2
3 files changed, 44 insertions, 5 deletions
diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py
index b50170759..ddd869448 100644
--- a/lib/sqlalchemy/dialects/sqlite/base.py
+++ b/lib/sqlalchemy/dialects/sqlite/base.py
@@ -1297,12 +1297,20 @@ 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)
+ if table_data:
+ PK_PATTERN = 'CONSTRAINT (\w+) PRIMARY KEY'
+ result = re.search(PK_PATTERN, table_data, re.I)
+ constraint_name = 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}
+
+ return {'constrained_columns': pkeys, 'name': constraint_name}
@reflection.cache
def get_foreign_keys(self, connection, table_name, schema=None, **kw):
diff --git a/test/dialect/test_sqlite.py b/test/dialect/test_sqlite.py
index 33903ff89..580950b12 100644
--- a/test/dialect/test_sqlite.py
+++ b/test/dialect/test_sqlite.py
@@ -8,7 +8,7 @@ from sqlalchemy.testing import eq_, assert_raises, \
assert_raises_message, is_
from sqlalchemy import Table, select, bindparam, Column,\
MetaData, func, extract, ForeignKey, text, DefaultClause, and_, \
- create_engine, UniqueConstraint, Index
+ create_engine, UniqueConstraint, Index, PrimaryKeyConstraint
from sqlalchemy.types import Integer, String, Boolean, DateTime, Date, Time
from sqlalchemy import types as sqltypes
from sqlalchemy import event, inspect
@@ -1130,6 +1130,18 @@ class ConstraintReflectionTest(fixtures.TestBase):
prefixes=['TEMPORARY']
)
+ Table(
+ 'p', meta,
+ Column('id', Integer),
+ PrimaryKeyConstraint('id', name='pk_name'),
+ )
+
+ Table(
+ 'q', meta,
+ Column('id', Integer),
+ PrimaryKeyConstraint('id'),
+ )
+
meta.create_all(conn)
# will contain an "autoindex"
@@ -1224,8 +1236,6 @@ class ConstraintReflectionTest(fixtures.TestBase):
def test_unnamed_inline_foreign_key_quoted(self):
inspector = Inspector(testing.db)
-
- inspector = Inspector(testing.db)
fks = inspector.get_foreign_keys('e1')
eq_(
fks,
@@ -1342,6 +1352,27 @@ class ConstraintReflectionTest(fixtures.TestBase):
[{'column_names': ['x'], 'name': None}]
)
+ def test_primary_key_constraint_named(self):
+ inspector = Inspector(testing.db)
+ eq_(
+ inspector.get_pk_constraint("p"),
+ {'constrained_columns': ['id'], 'name': 'pk_name'}
+ )
+
+ def test_primary_key_constraint_unnamed(self):
+ inspector = Inspector(testing.db)
+ eq_(
+ inspector.get_pk_constraint("q"),
+ {'constrained_columns': ['id'], 'name': None}
+ )
+
+ def test_primary_key_constraint_no_pk(self):
+ inspector = Inspector(testing.db)
+ eq_(
+ inspector.get_pk_constraint("d"),
+ {'constrained_columns': [], 'name': None}
+ )
+
class SavepointTest(fixtures.TablesTest):
diff --git a/test/requirements.py b/test/requirements.py
index 4ef5d62a3..9e041709c 100644
--- a/test/requirements.py
+++ b/test/requirements.py
@@ -532,7 +532,7 @@ class DefaultRequirements(SuiteRequirements):
"""Target driver reflects the name of primary key constraints."""
return fails_on_everything_except('postgresql', 'oracle', 'mssql',
- 'sybase')
+ 'sybase', 'sqlite')
@property
def json_type(self):