python executemany update_python – mycursor.executemany UPDATE无法按预期工作

该博客探讨了一个Python脚本,该脚本使用BeautifulSoup和Selenium从网站抓取CPU信息,并尝试使用executemany方法更新MySQL数据库中的记录。尽管没有错误,但更新的`family`字段值为空。作者提供了详细的代码片段,包括数据获取和更新查询,并寻求解决方案。
摘要由CSDN通过智能技术生成

题:

我有一个python脚本来抓取和网站它获得2个变量并将它们存储在2个列表中.然后我使用executemany使用一个变量更新MySQL数据库以匹配预先存在的行以插入另一个变量.

码:

import mysql.connector

from bs4 import BeautifulSoup as soup

from selenium import webdriver

import time, re

mydb = mysql.connector.connect(

host="host",

user="user",

passwd="passwd",

database="database"

)

mycursor = mydb.cursor()

d = webdriver.Chrome('D:/Uskompuf/Downloads/chromedriver')

d.get('https://au.pcpartpicker.com/products/cpu/overall-list/#page=1')

def cpus(_source):

result = soup(_source, 'html.parser').find('ul', {'id':'category_content'}).find_all('li')

_titles = list(filter(None, [(lambda x:'' if x is None else x.text)(i.find('div', {'class':'title'})) for i in result]))

data = [list(filter(None, [re.findall('(?<=\().*?(?=\))', c.text) for c in i.find_all('div')])) for i in result]

return _titles, [a for *_, [a] in filter(None, data)]

_titles, _cpus = cpus(d.page_source)

sql = "UPDATE cpu set family = %s where name = %s"

mycursor.executemany(sql, list(zip(_cpus, _titles)))

print(sql, list(zip(_titles, _cpus)))

_last_page = soup(d.page_source, 'html.parser').find_all('a', {'href':re.compile('#page\=\d+')})[-1].text

for i in range(2, int(_last_page)+1):

d.get(f'https://au.pcpartpicker.com/products/cpu/overall-list/#page={i}')

time.sleep(3)

_titles, _cpus = cpus(d.page_source)

sql = "UPDATE cpu set family = %s where name = %s"

mycursor.executemany(sql, list(zip(_cpus, _titles)))

mydb.commit()

MySQL UPDATE代码

sql = "UPDATE cpu set family = %s where name = %s"

mycursor.executemany(sql, list(zip(_cpus, _titles)))

MySQL UPDATE代码打印

print(sql, list(zip(_cpus, _titles)))

MySQL UPDATE代码打印输出

UPDATE cpu set family = %s where name = %s [('Pinnacle Ridge', 'AMD Ryzen 5 2600'), ('Coffee Lake-S', 'Intel Core i7-8700K'),...

前2行表

预期结果

第一个变量是名称,即需要匹配的变量,第二个变量是要更新为行的族.名称完全匹配,运行程序时没有错误,但所有族值都为空.

不知道解决这个问题的最佳方法是什么,我虽然可以做一个小提琴,但不确定executemany中的列表?

其他

如果您需要更多信息,请告诉我.

谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值