sites_query = connection.execute («ВЫБРАТЬ домен из django_site») psycopg2 не имеет атрибута execute - PullRequest
0 голосов
/ 15 февраля 2020

Когда я пытаюсь запустить gunicorn, я получаю эту ошибку:

Файл "/home/django-project/projectfolder/settings.py", строка 270, в ALLOWED_HOSTS = get_allowed_hosts (DATABASES ['default']) Файл "/home/django-project/projectfolder/allowed_hosts.py", строка 16, в get_allowed_hosts sites_query = connection.execute ("ВЫБЕРИТЕ домен FROM django_site") AttributeError: 'psycopg2.extensions .connection 'объект не имеет атрибута' execute

from .settings import *

DEBUG = False


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'projectname_settings',
        'USER': '******',
        'PASSWORD': '******',
        'HOST': 'localhost',
        'PORT': '',
    }
}

ALLOWED_HOSTS = [
    "mydomain.com",
] + get_allowed_hosts(DATABASES['default'])

Allowed_hosts.py

def get_allowed_hosts(db_params):
    connection = None

    if db_params['ENGINE'] == 'django.db.backends.postgresql_psycopg2':
        import psycopg2
        connection = psycopg2.connect(user=db_params['USER'],
                                      password=db_params['PASSWORD'],
                                      host=db_params['HOST'],
                                      port=db_params['PORT'],
                                      database=db_params['NAME'])
    elif db_params['ENGINE'] == 'django.db.backends.sqlite3':
        import sqlite3
        connection = sqlite3.connect(db_params['NAME'])

    if connection is not None:
        sites_query = connection.execute("SELECT domain FROM django_site")
        sites_result = sites_query.fetchall()
        sites = ["." + site[0] for site in sites_result]
        print("Allowed hosts")
        print(sites)
        return sites

1 Ответ

1 голос
/ 15 февраля 2020

Вы можете использовать cursor объект для выполнения запроса:

cursor = connection.cursor()
sites_query = cursor.execute("SELECT domain FROM django_site")
sites_result = cursor.fetchall()

Не забудьте закрыть соединение после получения данных:

cursor.close()
connection.close()
...