Можно ли получить все имена столбцов с типами данных из базы данных PgSQL с помощью автомата SQLAlchemy? - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь получить имена столбцов и типы данных из базы данных PgSQL. Результат должен выглядеть как результат этого запроса:

SELECT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'public'

Я пытался получить эту информацию, используя automap_base() и inspect(). К сожалению, automap_base() не отображает никаких таблиц схемы, а объект inspect не имеет методов, которые дают имена столбцов и типы данных. Я также попробовал метод column_descriptions таким образом:

In [1]:
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine, MetaData, inspect


Base = automap_base()

db_user = 'postgres'
db_password = 'password'
db_host = 'localhost'
db_name = 'db_test'

engine = create_engine(
    'postgresql+psycopg2://{user}:{password}@{hostname}/{database_name}'.format(
        user=db_user,
        password=db_password,
        hostname='{}:{}'.format(db_host, '5432'),
        database_name=db_name
    )
)

Base.prepare(engine, reflect=True)
clients = Base.classes.clients
session = Session(engine)

q = session.query(clients)
q.column_descriptions
Out [1]:

[{'name': 'clients',
  'type': sqlalchemy.ext.automap.clients,
  'aliased': False,
  'expr': sqlalchemy.ext.automap.clients,
  'entity': sqlalchemy.ext.automap.clients}]

Есть ли способ получить имена столбцов и типы данных таблицы из существующей базы данных, используя SQLAlchemy?

1 Ответ

0 голосов
/ 09 июля 2019

Ответ был прост:

meta = MetaData()
conn = engine.connect()
meta.reflect(bind=engine)

meta.sorted_tables
Метод

reflect() берет метаданные из существующей базы данных и сохраняет их в объекте MetaData, метод sorted_tables показывает все таблицы, столбцы и типы данных, хранящиеся в MetaData

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...