天天看點

Python資料庫 -- SQL語句的文法問題(即對于字元串的特殊處理)

有時候用變量存字元串輸入資料庫,會出現文法錯誤。

注意:Python的字元串換行時,末尾加反斜杠 \ 以示連接配接,若有原始字元轉義 r ,則每行都有。(别問,問就是PyCharm告訴我的Σ( ° △ °|||)︴)

檢查就可以發現是那個字段的字元串裡有單引号或者雙引号,這時候就要利用字元串的引号套用。

一般爬取的字元串裡隻會有單引号,于是,把SQL語句改成下面這樣,把整個句子的引号換成單引号,于是%s的引号就可以使用雙引号,于是替換進去的變量中的單引号也會被識别。

sql_insert = 'insert into linkedin_blog(uname,comments,operate,update_time,insert_time) ' \
             'values ("%s","%s","%s","%s","%s")' \
             % (uname, strcmts, operate, update_time, insert_time)
           

但是有時候字元串或者爬取的資料中會有反斜杠,衆所周知反斜杠可是轉義字元,這個東西突然出現可就壞事了,于是我們可以在字元串前加上小寫字母 r,忽略字元串中的轉義序列 ,使字元串成為“原始字元串” ,“原始字元串”将按配置設定給該字元串的方式列印,也就是你寫的什麼就是什麼。

sql_insert = r'insert into linkedin_blog(uname,comments,operate,update_time,insert_time) ' \
             r'values ("%s","%s","%s","%s","%s")' \
             % (uname, strcmts, operate, update_time, insert_time)
           

還有一種情況,就是如果出現了雙引号,那麼可以把它換成單引号或者中文單雙引号或者直接去掉,使用字元串的replace方法即可。

cmts.append(acmtid.text.replace('"', ''))