? ? ? ? 這是我自己的第一篇博客嘿嘿嘿。感覺各種各樣的教程網(wǎng)上都很多的,所以我想就記錄一下自己踩的坑吧。前兩天剛剛?cè)腴T學(xué)習(xí)Python爬蟲,用的是Scrapy這個(gè)框架,用起來(lái)很方便、好用,爬下來(lái)的數(shù)據(jù)可以存json、csv等格式,然后考慮到以后還要對(duì)數(shù)據(jù)處理分析,要存到數(shù)據(jù)庫(kù)里面,所以就照著網(wǎng)上的教程試了一下,然后就踩了幾個(gè)坑。
1.????<class 'pymysql.err.OperationalError'>: (1045, "Access denied for user 'root'@'localhost' (usingpassword: NO)")
? ? ? ? 這個(gè)錯(cuò)誤純屬自己粗心大意,這個(gè)大概是說(shuō)連接mysql時(shí)密碼錯(cuò)了,可是我看了好幾遍密碼沒錯(cuò)啊,最后發(fā)現(xiàn)是?settings.py 的變量名和 pipelines.py 中的變量名取名取得不一樣:一個(gè)是MYSQL_PASSWORD 一個(gè)是?MYSQL_PWD.然后改了一樣名字就好了。
2.????<class 'TypeError'>: %d format: a number is required, not str
? ? ? ? 這個(gè)是我看別人的博客教程被坑到了,這是我看的博客里的
????????????????圖片截取自:https://blog.csdn.net/B_Ben/article/details/88918646
?。?!注意數(shù)據(jù)庫(kù)端口 3306 ,沒錯(cuò)是吧,3306是沒錯(cuò),但是問題就出在單引號(hào),把 '3306' 兩邊的單引號(hào)去掉這個(gè)bug就沒了。
3.????TypeError: can't concat bytes to tuple
? ? ? ? 這個(gè)是這次坑了我最久的一個(gè)一個(gè)bug,看了好多篇中文博客都沒解決這個(gè)問題,最后在stack overflow上面找到了解決辦法,先上鏈接?
他的解決辦法大概就是把sql語(yǔ)句和你要插入的值分開,
Finally, I find out the way,?It seems like if I want to use variable in cursor.execute(), I have to separate the sql syntax and value.If I want to use sql syntax and value in one line, I have to use cursor.execute(sql syntax and value) directly and double quotes or triple quotes are both fine.
簡(jiǎn)單說(shuō)就是這樣做不安全,容易出錯(cuò)
sql = "INSERT INTO table1 (v1, v2) VALUES (%s, %s)", (item['value1'], item['value2'])
self.cursor.execute(sql)
應(yīng)該這樣:
????????????????????第一步,編寫sql語(yǔ)句
????????????????????第二步,把數(shù)據(jù)放入數(shù)據(jù)集合
????????????????????第三步,execute執(zhí)行
下面是我的代碼:
# 創(chuàng)建sql語(yǔ)句
sql = "INSERT INTO table1 (v1,v2) VALUES (%s,%s)"
# 暫存數(shù)據(jù)
value1 = item['value1']
value2 = item['value2']
# 把數(shù)據(jù)放進(jìn)data
data = (value1,value2)
# 執(zhí)行sql語(yǔ)句
cursor.execute(sql,data)
# 在控制臺(tái)打印一下,測(cè)試語(yǔ)句
print(sql)
好了,到這也就結(jié)束了,第一次寫博客排版有點(diǎn)不堪,估計(jì)也沒啥人看8。就是記錄一下我自己學(xué)習(xí)中遇到的問題,如果能幫到別人那就更好了。