Ошибки SQLite и выходы (после первого результата) при выполнении оператора IF внутри цикла FOR - PullRequest
0 голосов
/ 18 июня 2019

Я построил паука-скрапа, чтобы пробежаться по месту работы и вернуть все работы, на которые у меня есть квалификация, чтобы мне не приходилось просматривать их каждый день.

Я правильно разбираю json:

        jsonresponse = json.loads(response.body)
        for item in jsonresponse:
            yield{
                'id':item['id'],
                'date':item['date'],
                'company':item['company'],
                'position':item['position'],
                'description':item['description'],
                'url':item['url'],
                }

И я настроил функцию, которая будет принимать любой файл .csv, в котором я сохраняю результаты, создаю новый в качестве резервной копии, затем создаю базу данных SQLite для выдачи результатов в:

    def close(self, reason):
        csv_file = max(glob.iglob('*.csv'), key=os.path.getctime)

        with open(csv_file) as input, open('jobs2.csv', 'w', newline='') as output:
            writer = csv.writer(output)
            for row in csv.reader(input):
                if any(field.strip() for field in row):
                    writer.writerow(row)


        db = sqlite3.connect(':memory:')
        csv_data = csv.DictReader(open('jobs.csv'))
        cur = db.cursor()
        cur.execute('''CREATE TABLE jobs_table(date TEXT PRIMARY KEY,
                                               id TEXT,
                                               company TEXT, 
                                               position TEXT,
                                               description TEXT,
                                               url TEXT)
                    ''')


        db.commit()
        print('')
        print('DB CREATED')
        print('')

Затем я определяю список «умений» для проверки каждой строки в файле .csv, чтобы проверить, соответствует ли мне эта должность:

    # skills = {'python'}
    skills = ('python')

    for row in csv_data:
        if skills in row.get('description').lower():
            print('Job Match!')
            print('')
            print('')
            print(row)
            print('')
            print('')```

И вот тут я сталкиваюсь с проблемами. Он печатает, что есть совпадение, и печатает OrderedDict для первого результата:

2019-06-18 14:59:56 [scrapy.extensions.feedexport] INFO: Stored csv feed (309 items) in: jobs.csv```


DB CREATED


Job Match!


OrderedDict([('id', '73345'), ('date', '2019-06-11T14:16:33-07:00'), ('company', 'JBS Custom Software Solutions'), ('position', 'Full Stack Developer'), ('description', 'JBS Full-Stack Developer (Python, JavaScript, PostgreSQL)Required; 3+ years working with Python    3+ years working with JavaScript; Strong knowledge of modern JavaScript development practices; Strong computer science skills'), ('url', 'https://entrenous.com/jobs/73472')])```

Затем возникают проблемы, когда я пытаюсь запустить cur.execute () для вставки строк в мою "jobs_table". Вот что я попробовал (КОМАНДЫ) и что от него отказано (ОШИБКА):

COMMAND: cur.execute('INSERT INTO jobs_table(date, id, company, position, description, url) VALUES(%s, %s, %s, %s, %s, %s)', row)

ОШИБКА: (sqlite3.OperationalError: near "%": syntax error)

COMMAND: cur.execute('INSERT INTO jobs_table(date, id, company, position, description, url) VALUES(?, ?, ?, ?, ?, ?)', row)

ОШИБКА: (sqlite3.ProgrammingError: Binding 1 has no name, but you supplied a dictionary (which has only names).)

COMMAND: cur.execute("INSERT INTO jobs_table(date, id, company, position, description, url) VALUES(date, id, company, position, description, url)", row)

ОШИБКА: (sqlite3.OperationalError: no such column: date)

COMMAND: cur.execute("INSERT INTO jobs_table(date, id, company, position, description, url) VALUES(:date, :id, :company, :position, :description, :url)", row)

ОШИБКА: (sqlite3.IntegrityError: UNIQUE constraint failed: jobs_table.date)

COMMAND: cur.execute("INSERT INTO jobs_table(date, id, company, position, description, url) VALUES('date', 'id', 'company', 'position', 'description', 'url')", row)

ОШИБКА: (sqlite3.IntegrityError: UNIQUE constraint failed: jobs_table.date)

Я завершаю это простым коммитом, закрытием и функцией печати, чтобы я знал, что все в порядке, и я могу вернуться в постель, но, когда дела идут, я не могу вернуться в кровать.

        db.commit()
        db.close()
        print("JOBS IMPORTED!")

Я опубликовал аналогичный вопрос ранее, но не совсем ясно, что я хотел получить от публикации здесь, поэтому вот что я хочу: Я хочу иметь возможность сохранять только задания с ["описаниями"], которые содержат мои ["навыки"]. Остальные из них бесполезны для меня.

Есть ли кто-нибудь, кто может мне помочь с этим?

1 Ответ

0 голосов
/ 18 июня 2019

Если вы получаете эту ошибку: (sqlite3.IntegrityError: сбой ограничения UNIQUE: jobs_table.date)

Убедитесь, что вы ВСТАВЛЯЕТЕ вещи в правильном порядке ... Двигайтесь дальше!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...