Как выполнить не SQL команды в Psycopg2 - PullRequest
0 голосов
/ 31 октября 2018

Как можно выполнять команды, не являющиеся SQL, такие как

\connect
\dl
\dt
\du
\d+ table_name 

... и т.д.

в psycopg2 ??

cur.execute("\dl")

при попытке сделать это с помощью курсора я получаю сообщение об ошибке

syntax error at or near "\"
LINE 1: \dl

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Эти команды не для sql специфичны для psql - PostgreSQL интерактивный терминал . Вы не можете выполнить их с помощью psycopg2, но вы можете запустить psql из своего приложения. Приведенный ниже полный пример в Python 3.6 использует подпроцесс :

import psycopg2
import sys
import subprocess

conn = psycopg2.connect(host='localhost', dbname='test', user='postgres')
conn.autocommit = True

cur = conn.cursor()
cur.execute('create table my_table(id int primary key, str text)')

res = subprocess.run('psql -c "\d+ my_table" test postgres', stdout=subprocess.PIPE)
print(res.stdout.decode(sys.stdout.encoding))

Выход:

                                  Table "public.my_table"
 Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
--------+---------+-----------+----------+---------+----------+--------------+-------------
 id     | integer |           | not null |         | plain    |              | 
 str    | text    |           |          |         | extended |              | 
Indexes:
    "my_table_pkey" PRIMARY KEY, btree (id)
0 голосов
/ 31 октября 2018

Эти команды реализуются инструментом командной строки psql, а не сервером PostgreSQL. Некоторые из них (например, \dt) имеют эквиваленты SQL (например, SELECT … FROM INFORMATION_SCHEMA.tables - подробности здесь ), а другие (например, \connect) не имеют. Если вы хотите подключиться к другому серверу Postgres, создайте новый объект подключения.

...