Skip to content

Commit 88c35c7

Browse files
author
Ilya Gurov
authored
feat: implement schemas reflection method (#27)
1 parent d00dfb9 commit 88c35c7

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,9 @@ def get_indexes(self, connection, table_name, schema=None, **kw):
310310
FROM information_schema.indexes as i
311311
JOIN information_schema.index_columns AS ic
312312
ON ic.index_name = i.index_name AND ic.table_name = i.table_name
313-
WHERE i.table_name="{table_name}"
313+
WHERE
314+
i.table_name="{table_name}"
315+
AND i.index_type != 'PRIMARY_KEY'
314316
GROUP BY i.index_name, i.is_unique
315317
""".format(
316318
table_name=table_name
@@ -372,6 +374,33 @@ def get_pk_constraint(self, connection, table_name, schema=None, **kw):
372374

373375
return {"constrained_columns": cols}
374376

377+
def get_schema_names(self, connection, **kw):
378+
"""Get all the schemas in the database.
379+
380+
Args:
381+
connection (Union[
382+
sqlalchemy.engine.base.Connection,
383+
sqlalchemy.engine.Engine
384+
]):
385+
SQLAlchemy connection or engine object.
386+
387+
Returns:
388+
list: Schema names.
389+
"""
390+
if isinstance(connection, Engine):
391+
connection = connection.connect()
392+
393+
schemas = []
394+
with connection.connection.database.snapshot() as snap:
395+
rows = snap.execute_sql(
396+
"SELECT schema_name FROM information_schema.schemata"
397+
)
398+
399+
for row in rows:
400+
schemas.append(row[0])
401+
402+
return schemas
403+
375404
def get_foreign_keys(self, connection, table_name, schema=None, **kw):
376405
"""Get the table foreign key constraints.
377406

test/test_suite.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
from sqlalchemy.testing.suite.test_select import ExistsTest as _ExistsTest
4646
from sqlalchemy.testing.suite.test_types import BooleanTest as _BooleanTest
4747

48+
config.test_schema = ""
49+
4850

4951
from sqlalchemy.testing.suite.test_types import ( # noqa: F401, F403
5052
DateTest as _DateTest,

0 commit comments

Comments
 (0)