Как использовать "\dt" в cursor.execute() для получения таблиц в PostgreSQL? (Django)
В Django я пытаюсь использовать \dt
в cursor.execute()
для получения таблиц в PostgreSQL, как показано ниже:
# "views.py"
from django.http import HttpResponse
from django.db import connection
def test(request):
cursor = connection.cursor()
cursor.execute('''\dt''') # Here
row = cursor.fetchone()
print(row)
return HttpResponse("Test")
Но, я получил ошибку ниже:
django.db.utils.ProgrammingError: syntax error at or near "\"
СТРОКА 1: \dt
Итак, я заменил cursor.execute('''\dt''')
на cursor.execute('''\\dt''')
, как показано ниже:
# "views.py"
from django.http import HttpResponse
from django.db import connection
def test(request):
# ...
cursor.execute('''\\dt''') # Here
# ...
return HttpResponse("Test")
Но, я все еще получаю ошибку ниже:
django.db.utils.ProgrammingError: syntax error at or near "\"
СТРОКА 1: \dt
Итак, как мне использовать \dt
в cursor.execute()
для получения таблиц в PostgreSQL?
Вы не можете использовать команду \dt
в качестве запроса postgresql. \dt
- это команда psql
на стороне клиента. PostgreSQL может обрабатывать только команды SQL (например, SELECT
, INSERT
, ALTER
, ... .
Но есть какой-то способ:
- выполните
psql
с параметром-E
. Это означает echo all, .
- выполнить выбранную команду с обратной косой чертой (например,
\dt
) - psql выводит результат (и SQL-запрос, созданный для получения результата)
- выполните из Django этот запрос
Вы можете перечислить таблицы, используя обычный SQL, без использования psql.
cursor.execute('''
select *
from pg_catalog.pg_tables
where schemaname = '<your_schema_name>';
''')