postgresql - 使用 Python 3 连接到 PostgreSQL 不起作用:create_engine(URL(**settings.DATABASE))
问题描述
我按照本教程学习了使用 scrapy 进行网络抓取。尽管许多部分已经过时,即使在针对项目检查了打开的拉取请求之后,我还是遇到了一些问题。不过,我确实坚持了下来,并使用 Python 3(而不是 2.7)和最新的组件再次启动了该项目。我在scrapy docs中读了一点,并让它与我感兴趣的网站之一一起使用,但有一个问题。
问题
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 中,但如果有问题,我愿意接受其他解决方案。请分享一些见解。
设置.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
声明
解决方案
DATABASE
未在文档中列出并尝试将其导入import settings
或import scrapy.settings
已失败。我让它与以下代码一起工作,同时将数据保存在 settings.py 中:
import scrape_tut.settings
def db_connect():
return create_engine(URL(**myproject.settings.DATABASE))
推荐阅读
- php - PHP Sqlite Drop Table 未执行
- html - Angular:如何使内容可编辑的div的占位符持续存在,直到仅在输入内容时
- r - poLCA in R is not executing. I am getting a weird error message
- php - 如何将不同类型的日期格式化为一个?
- ios - \ 是什么意思?斯威夫特的意思
- xcode - Xcode 11.5 助手编辑器显示任何文件
- html - 将剪辑路径:多边形()转换为与边缘兼容的 SVG
- android - 出现任何错误时如何隐藏 Android webView 页面 url?
- dependency-injection - Angular 库中的 forRoot 不是 workig ,但在 appmodule 中它按预期工作
- python - Cxvpy-ECOS 求解器永远运行