Python Scrapy爬取豆瓣Top250并存入mysql數(shù)據(jù)庫(kù),出現(xiàn)TypeError: can't concat bytes to tuple

? ? ? ? 這是我自己的第一篇博客嘿嘿嘿。感覺各種各樣的教程網(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上面找到了解決辦法,先上鏈接?

https://stackoverflow.com/questions/50038859/how-to-avoid-sql-injection-if-i-insert-data-from-csv-file-with-variables-in-pyth?r=SearchResults

他的解決辦法大概就是把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í)中遇到的問題,如果能幫到別人那就更好了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容