【发布时间】:2019-05-15 08:52:14
【问题描述】:
已解决,请参阅 cmets 和解决方案
我有 2 个抓取工具,它们将抓取的数据存储在 2 个 SQL 表中:cpu 和 cpubench。
cpu 包含:名称、价格、id(这在爬虫中不是恒定的)、标记
cpubench 包含:名称、标记、cpurank
这是来自这些表的 sn-p:
CPU
name price id mark
AMD Ryzen 5 2600 $259.00 jLF48d 0
Intel Core i7-8700K $573.74 sxDzK8 0
AMD Ryzen 7 2700X $449.69 bddxFT 0
Intel Core i5-8600K $396.39 Mr2rxr 0
AMD Ryzen 3 2200G $145.00 RkJtt6 0
Intel Core i9-9900K $829.61 jHZFf7 0
AMD Ryzen 5 2600X $300.00 6mm323 0
Intel Core i5-9600K $419.00 28qhP6 0
Intel Core i7-9700K $659.00 WtyV3C 0
AMD Ryzen 5 1600 $232.61 mV98TW 0
cpubench
name mark cpurank
AMD Ryzen 5 2600 13527 160
Intel Core i7-8700K 15962 98
AMD Ryzen 7 2700X 16971 75
Intel Core i5-8600K 12786 175
AMD Ryzen 3 2200G 7325 503
Intel Core i9-9900K 20150 37
AMD Ryzen 5 2600X 14342 135
Intel Core i5-9600K 13498 162
Intel Core i7-9700K 17379 69
AMD Ryzen 5 1600 12264 187
注意:
两个表中的所有列都是 VARCHAR(255)。
表格并没有按照这个确切的顺序排列名称。
我正在使用以下 python 代码:
mycursor = mydb.cursor()
sql = ("SELECT cpu.id, cpu.name, cpu.price, cpubench.mark FROM cpu LEFT JOIN
cpubench ON cpu.name = cpubench.name")
mycursor.execute(sql)
运行没有错误。
但是cpu中所有的mark值都是空的。
我该如何解决/解决这个问题?
任何帮助将不胜感激。
更新
我创建了一个有效的 SQL 小提琴:https://www.db-fiddle.com/f/sngju1uUBNMF56eVVTYu6H/3
我已经在 python 中尝试了 fiddle 中的代码,但所有 cpu.mark 值都为空。
谢谢
【问题讨论】:
-
“cpubench.mark”是否为空值?
-
你可以试试
UPPER(TRIM(cpu.name)) = UPPER(TRIM(cpubench.name)),可能实际数据有一些空格 -
@Vivek cpubench.mark 包含值但是在运行我的代码后 cpu.mark 只有 null 值
-
@Vivek 我已经使用 MySQL 工作台比较了 cpu.name 和 cpubench.name 中的名称值,但我会试一试,那会去哪里?
-
代替
sql = ("SELECT cpu.id, cpu.name, cpu.price, cpubench.mark FROM cpu LEFT JOIN cpubench ON cpu.name = cpubench.name"),使用sql = ("SELECT cpu.id, cpu.name, cpu.price, cpubench.mark FROM cpu LEFT JOIN cpubench ON UPPER(TRIM(cpu.name)) = UPPER(TRIM(cpubench.name))")
标签: python mysql mysql-python