Как сохранить очищенные данные в базу данных MySQL?

У меня есть скрипт на Python, который собирает данные с сайта вакансий. Я хочу сохранить эти очищенные данные в базе данных MySQL, но после написания кода он подключается к базе данных. Теперь после подключения он не создает таблицу и, как следствие, не может вставить эти данные в таблицу. Пожалуйста, мне нужен мой код для хранения этих очищенных данных в таблице в базе данных MYSQL.

Вот мой код

import requests
from bs4 import BeautifulSoup
import mysql.connector

for x in range(1, 210):
    html_text = requests.get(f'https://www.timesjobs.com/candidate/job-search.html? from=submit&actualTxtKeywords=Python&searchBy=0&rdoOperator=OR&searchType=personalizedSearch&luceneResultSize=25&postWeek=60&txtKeywords=Python&pDate=I&sequence = {x}&startPage=1').text
    soup = BeautifulSoup(html_text, 'lxml')
    jobs = soup.find_all('li', class_ = 'clearfix job-bx wht-shd-bx')

job_list = []
for job in jobs:
     company_name = job.find('h3', class_ = 'joblist-comp-name').text.strip().replace(' ','')
     keyskill = job.find('span', class_ = 'srp-skills').text.strip().replace(' ','')
     
       
     all_detail = {company_name, keyskill}
     job_list.append(all_detail)
         
     db = mysql.connector.connect(host= 'localhost',
                         user= 'root',
                         password= 'Maxesafrica2')
     
     cursor = db.cursor()
     cursor.execute("CREATE DATABASE first_db")
     print("Connection to MYSQL Established!")

     db = mysql.connector.connect(host= 'localhost',
                     user= 'root',
                     password= 'Maxesafrica2',
                     database = 'first_db'
                    )
     
     print("Connected to Database!")
     cursor = db.cursor()
     mysql_create_table_query = """CREATE TABLE first_tbl (Company Name Varchar(300) NOT NULL,
                                                            Keyskill Varchar(400) NOT NULL)"""
                                
     result = cursor.execute(mysql_create_table_query)
     insert_query = """INSERT INTO first_tbl (Company Name, Keyskill)
                         VALUES (%s, %s)"""
                         
     records_to_insert = job_list  
     
     cursor = db.cursor()
     cursor.executemany(mysql_create_table_query, records_to_insert)                  

     db.commit()
     cursor.close()
     db.close()
     
     print('Done!')

Вот ошибка, которую я получаю

Connection to MYSQL Established!
Connected to Database!
Traceback (most recent call last):
File "C:\Users\LP\AppData\Local\Programs\Python\Python310\lib\site-packages\mysql\connector\connection_cext.py", line 565, in cmd_query
self._cmysql.query(mysql_connector.MySQLInterfaceError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Name Varchar(300) NOT NULL,
                                                ' at line 1


                
    
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Небольшая проблема с именем столбца. Вместо «Название компании» должно быть «Название_компании». SQL не любит пробелы в именах столбцов. Обновлены запросы, которые вы должны выполнить:

CREATE TABLE first_tbl 
(
    Company_Name Varchar(300) NOT NULL,
    Keyskill Varchar(400) NOT NULL
)

INSERT INTO first_tbl 
    (Company_Name, Keyskill)
VALUES (%s, %s)

Я думаю, что проблема связана с именем поля «Название компании», которое вы поместили с пробелом между ними. Попробуйте имя с и _ вот так

mysql_create_table_query = """CREATE TABLE first_tbl (Company_Name Varchar(300) NOT NULL,
Keyskill Varchar(400) NOT NULL)"""

Спасибо вам обоим. Это решило эту проблему. К сожалению, я все еще получаю другую ошибку. Здесь Пожалуйста, проверьте. Файл "c:\Users\LP\Documents\python\dbtest\dbtest.py", строка 48, в <module> cursor.executemany(mysql_create_table_query, records_to_insert) packages\mysql\connector\connection_cext.py", строка 738, в prepare_for_mysql mysql.connector.errors.ProgrammingError: Не удалось обработать параметры: set({'python,webtechnologies,linux,mobile,mysql,angularjs,ja‌​vascript', 'SuryaInformaticsSolutionsPvt.Ltd.'}), он должен быть списка типов , кортеж или словарь

Miracle 27.11.2022 08:26

Я думаю, дело в том, как вы определили ```records_to_insert . You assigned records_to_insert = job_list```, но, в свою очередь, job_list представляет собой список наборов. Просто попробуйте определить job_list как список простых элементов, таких как job_list.append(company_name) и jobs_list.append(keyskill).

Ulisse Rubizzo 27.11.2022 08:34

Здравствуйте @Ulisse Rubizzo, спасибо за ваш ответ. Я преобразовал job_list в кортеж. Вот код joblistT = tuple(job_list). После этого я присвоил records_to_insert = joblistT и, к сожалению, это все еще не сработало. У меня такая же ошибка. Пожалуйста, любое другое предложение?

Miracle 27.11.2022 20:27

Я превратил all_details в кортеж, и он решил вторую ошибку. Спасибо @Tickloop и @Ulisse Rubizzo за помощь. я весьма признателен

Miracle 28.11.2022 11:06

Другие вопросы по теме