Это ошибки:
[scrapy.core.scraper] ERROR: Error processing {'level': None,
'school': 'Some school name',
'place': None,
'subject': None}
Traceback (most recent call last):
File "/home/reducedgosling/.virtualenvs/data/lib/python3.6/site-packages/twisted/internet/defer.py", line 653, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/home/reducedgosling/Programming/schools/pipelines.py", line 28, in process_item
self.cur.execute(sql, data)
psycopg2.InternalError: current transaction is aborted, commands ignored until end of transaction block
items.py
class SchoolsItem(scrapy.Item):
subject = scrapy.Field()
level = scrapy.Field()
place = scrapy.Field()
school = scrapy.Field()
spider.py
def parse_school(self, response):
item = SchoolsItem()
school = response.css('h1 span.title::text').extract_first()
table_rows = response.css('tr')
for x in table_rows:
item['subject'] = x.css('td.views-field-title a::text').extract_first()
item['level'] = x.css('td.views-field-field-level').xpath('normalize-space(./text())').extract_first()
item['place'] = x.css('td.views-field-field-campus').xpath('normalize-space(./text())').extract_first()
item['school'] = school
yield item
pipelines.py
def process_item(self, item, spider):
sql = "INSERT INTO udir_content (subject, level, school, place) VALUES (%s, %s, %s, %s);"
data = (item['subject'], item['level'], item['school'], item['place'])
self.cur.execute(sql, data)
self.connection.commit()
return item
Что я делаю не так?Я подозревал значения Null, которые Python (или psycopg?) Превращает в значения None?Но PostgreSQL принимает нулевые значения, если я не укажу NOT NULL, верно?
Первая ошибка, которая отображается в файле журнала psql, такова:
ERROR: relation "udir_content" does not exist at character 13
STATEMENT: INSERT INTO udir_content (subject, level, school, place) VALUES (NULL, NULL, 'Some school name', NULL);
Остальное просто говорит "транзакция прервана".