SQL REPL из Python/Sqlalchemy/Psycopg2Python

Программы на Python
Anonymous
SQL REPL из Python/Sqlalchemy/Psycopg2

Сообщение Anonymous »

Полезно иметь интерфейс командной строки БД для написания быстрых необработанных SQL-запросов. Предположим, что 1 минута, которая требуется, чтобы напомнить себе, как ввести правильную версию psql postgresql://username@localhost:5432, — это слишком долго.
Есть ли такая возможность? удобный метод, такой как engine.interactive(), который просто отправляет вас в CLI в текущей базе данных, аналогично Breakpoint(), который отправляет вас в PDB? Я подумал об одном:

Код: Выделить всё

subprocess.run(['psql', engine.url])
Но это не работает, поскольку psql не принимает бит +psycopg2: строки подключения sqlalchemy.

Код: Выделить всё

$ psql postgresql+psycopg2://postgres:dev@localhost:5432/
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "root" does not exist

$ psql postgresql://postgres:dev@localhost:5432/
psql (16.4 (Debian 16.4-1.pgdg120+1))
Type "help" for help.

postgres=#
Я могу отрезать его сам, и это работает:

Код: Выделить всё

def enter_cli(engine):
url = engine.url.set(drivername=url.drivername.split("+")[0])
connection_string = url.render_as_string(hide_password=False)
subprocess.run(["psql", connection_string])
Но, похоже, это непереносимо, поскольку я жестко запрограммировал CLI и конкретный тип строки подключения. (например, похоже, что pgcli хочет postgres:// и не принимает postgresql://.) Другой подход — написать CLI на основе Python, но с наивным подходе вы теряете множество функций завершения табуляции и подобных функций. Есть ли портативный способ сделать это?


Подробнее здесь: https://stackoverflow.com/questions/790 ... -psychopg2

Вернуться в «Python»