Подключение к 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 шт):
Ознакомьтесь, пожалуйста, с документацией 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)
Обратил внимание, что в ошибке имя таблицы написано lowercase. Переименование таблиц моделей с выполнением повторных миграций решило проблему с доступом к данным.
Django ver. 3.0.4
PostgreSQL 12.1