Подключение к Postgresql DB сайта на Django

Есть тестовый сайт на Django с подключенной Postgresql DB, все крутится на одном хосте. Через pgAdmin видно все таблицы: моделей и дефолтные таблицы сайта. Пытаюсь подключиться к этой ДБ и вытащить данные:

import psycopg2
from ххх import config

connection = psycopg2.connect(user      = config["DB_USER"],
                              password  = config["DB_PASS"],
                              host      = "127.0.0.1",
                              port      = "5432",
                              database  = config["DATABASE"])
cursor = connection.cursor()

# Print PostgreSQL Connection properties
print("DNS Param", connection.get_dsn_parameters(),"\n")

# Print PostgreSQL version
cursor.execute("SELECT version();")
record = cursor.fetchone()
print("You are connected to - ", record,"\n")

во ответе вроде все хорошо

DNS Param {'user': 'username', 'dbname': 'somdb', 'host': '127.0.0.1', 'port': '5432', 'tty': '', ...} 
You are connected to -  ('PostgreSQL 12.1, compiled by Visual C++ build 1914, 64-bit',) 

Однако если попробовать прочитать дефолтные таблицы сайта

print("DB Info: ", cursor.execute("""SELECT * FROM django_admin_log;"""))
print("DB Info: ", cursor.execute("""SELECT * FROM django_content_type;"""))
print("DB Info: ", cursor.execute("""SELECT * FROM django_session;"""))

возвращается None:

DB Info:  None
DB Info:  None
DB Info:  None

При обращении к таблицам моделей сайта

print("DB Info: ", cursor.execute("""SELECT * FROM app_settings_Global_Settings"""))

Traceback (most recent call last):
  File "C:/..../db_connector.py", line 27, in <module>
    print("DB Info: ", cursor.execute("""SELECT * FROM app_settings_Global_Settings;"""))
psycopg2.errors.UndefinedTable: relation "app_settings_global_settings" does not exist
LINE 1: SELECT * FROM app_settings_Global_Settings;

Что я делаю не так?

UPDATE:

Вопрос заключается не в том, почему возвращается None на дефлтных страницах, с этим все ясно. Почему при чтении таблиц моделей возникает ошибка?


Ответы (2 шт):

Автор решения: mrEvgenX

Ознакомьтесь, пожалуйста, с документацией psycopg2.

Сам execute не возвращает никаких данных (документация).

Надо использовать fetchall (или fetchone/fetchmany).

connection = psycopg2.connect(**connection_settings)
cursor = connection.cursor()
cursor.execute(your_sql_query)
rows = cursor.fetchall()  # Извлекаем данные
for row in rows:
    process(row)
→ Ссылка
Автор решения: Luarvick

Обратил внимание, что в ошибке имя таблицы написано lowercase. Переименование таблиц моделей с выполнением повторных миграций решило проблему с доступом к данным.

Django ver. 3.0.4

PostgreSQL 12.1

→ Ссылка