Подключение к PostgreSQL с Python 3 не работает: create_engine (URL (** settings.DATABASE)) - PullRequest
0 голосов
/ 05 ноября 2018

Я следовал этому уроку, чтобы узнать о соскобах в сети с помощью скрапа. Многие части устарели, хотя даже после проверки открытых запросов на извлечение проекта у меня возникло несколько проблем. Хотя я выполнил задание и снова начал проект с Python 3 (вместо 2.7) и обновленными компонентами. Я немного прочитал в документации по scrapy и заставил работать с одним из моих сайтов, хотя есть одна проблема.

Вопрос

models.py содержит следующий код:

from sqlalchemy.engine.url import URL

import settings

def db_connect():
    return create_engine(URL(**settings.DATABASE))

Это дает NameError: name 'settings' is not defined при запуске с scrapy crawl my_spider -o items.json

Попытка другого решения, предложенного здесь на StackExchange:

from sqlalchemy.engine.url import URL

from scrapy.utils.project import get_project_settings

def db_connect():
    settings = get_project_settings()
    return create_engine(URL(**settings.DATABASE))

Результат: AttributeError: 'Settings' object has no attribute 'DATABASE'

После успешного устранения всех других ошибок мне пришлось заменить код.

    return create_engine("postgresql://scrape:123456@localhost:5432/scrape")

Это работает, все остальное в порядке. Может кто-нибудь сказать мне, пожалуйста, каков рекомендуемый подход для получения информации и построения строки подключения? Я бы предпочел хранить данные конфигурации в settings.py , но я открыт для других решений, если есть проблема с этим. Пожалуйста, поделитесь некоторым пониманием.

settings.py:

DATABASE = {
    'drivername': 'postgres',
    'host': 'localhost',
    'port': '5432',
    'username': 'scrape',
    'password': '123456',
    'database': 'scrape'
}

Обзор проекта:

├── __init__.py
├── items.py
├── middlewares.py
├── models.py
├── pipelines.py
├── settings.py
└── spiders
    ├── my_spider.py
    └── __init__.py

Редактировать: Добавлено from sqlalchemy.engine.url import URL заявление

1 Ответ

0 голосов
/ 05 ноября 2018

DATABASE не указан в документации , и попытки импортировать его с import settings или import scrapy.settings не увенчались успехом. Я получил его для работы со следующим кодом, сохраняя данные в settings.py:

import scrape_tut.settings

def db_connect():
    return create_engine(URL(**myproject.settings.DATABASE))
...