У меня есть скрипт на 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
Небольшая проблема с именем столбца. Вместо «Название компании» должно быть «Название_компании». 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)"""
Я думаю, дело в том, как вы определили ```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, спасибо за ваш ответ. Я преобразовал job_list в кортеж. Вот код joblistT = tuple(job_list)
. После этого я присвоил records_to_insert = joblistT и, к сожалению, это все еще не сработало. У меня такая же ошибка. Пожалуйста, любое другое предложение?
Я превратил all_details
в кортеж, и он решил вторую ошибку. Спасибо @Tickloop и @Ulisse Rubizzo за помощь. я весьма признателен
Спасибо вам обоим. Это решило эту проблему. К сожалению, я все еще получаю другую ошибку. Здесь Пожалуйста, проверьте. Файл "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,javascript', 'SuryaInformaticsSolutionsPvt.Ltd.'}), он должен быть списка типов , кортеж или словарь