1. 程式人生 > 資料庫 >python3 插入 mysql 時內容帶有特殊字元處理

python3 插入 mysql 時內容帶有特殊字元處理

一、概述

插入mysql時,如果內容中有引號等特殊符號,會報錯,簡單的解決方法可以用反斜槓轉義,還可以用 pymysql 的方法(pymysql.escape_string)自動轉義:

使用舉例:

c = '''  北京時間9月20日晚間9點半,智慧供應鏈服務供應商百世集團將在<a class="wt_article_link" "WeiboCard.show(2125973432,'tech',this)" href="?zw=tech" target="_blank">紐約證券交易所</a>正式掛牌上市,交易程式碼為“BSTI”。這是繼<span id="usstock_ZTO"><a href="http://stock.finance.sina.com.cn/usstock/quotes/ZTO.html" class="keyword f_st" target="_blank">中通</a></span><span id=quote_ZTO></span>快遞之後第二家赴美上市的快遞物流企業。&nbsp;</p>
<p>  此次IPO百世集團一共發行4500萬股美國存托股份(ADS),每股價格為10美元,總融資額高達4.5億美元,為今年目前為止在美國上市的中國公司中募資規模最大的IPO。此外,百世和售股股東還允許其承銷商通過超額配售權購買額外不多於675萬股ADS。</p>
<p>  有中通這個“珠玉”在前,美股市場似'''

sql = "INSERT INTO tbl_stream_copy(weburl,title,content,channelId,datetime,pubtime,website)VALUES ('%s','%s',\'%s\','%s','%s','%s','%s')" % (a,b,pymysql.escape_string(c),e,datetime,datetime,a)

 

二、演示

環境說明

mysql ip: 10.212.82.54

mysql 版本:5.7

 

建表語句

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `classify` varchar(64) DEFAULT NULL,
  `content` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

 

字串

這裡先臨時指定一段字串插入

 

完整程式碼如下:

# !/usr/bin/python3
# -*- coding: utf-8 -*-
import pymysql

conn = pymysql.connect(
    host="10.212.82.56",  # mysql ip地址
    user="root",
    passwd="123456",
    port=3306  # mysql 埠號,注意:必須是int型別

)

cur = conn.cursor()  # 建立遊標

c = '''北京時間9月20日晚間9點半,智慧供應鏈服務供應商百世集團將在<a class="wt_article_link" "WeiboCard.show(2125973432,'tech',this)" href="?zw=tech" target="_blank">紐約證券交易所</a>正式掛牌上市,交易程式碼為“BSTI”。這是繼<span id="usstock_ZTO"><a href="http://stock.finance.sina.com.cn/usstock/quotes/ZTO.html" class="keyword f_st" target="_blank">中通</a></span><span id=quote_ZTO></span>快遞之後第二家赴美上市的快遞物流企業。&nbsp;</p>
<p>  此次IPO百世集團一共發行4500萬股美國存托股份(ADS),每股價格為10美元,總融資額高達4.5億美元,為今年目前為止在美國上市的中國公司中募資規模最大的IPO。此外,百世和售股股東還允許其承銷商通過超額配售權購買額外不多於675萬股ADS。</p>
<p>  有中通這個“珠玉”在前,美股市場似'''

# sql = ""
sql = "INSERT INTO qunar.test(classify,content)VALUES ('%s',\'%s\')" % ('新聞',pymysql.escape_string(c))

cur.execute(sql)
conn.commit()  # 主動提交,否則執行sql不生效
cur.close()

執行程式碼,查看錶記錄

 

讀取excel

現有一個excel,需要根據excel內容,插入到mysql中。不管它到底包含多麼複雜的特殊字元

excel內容如下:

 

完整程式碼如下:

import pymysql

conn = pymysql.connect(
    host="10.212.82.56",  # mysql ip地址
    user="root",
    passwd="egzZAtpHxoshRc2j",
    port=3306  # mysql 埠號,注意:必須是int型別
)

cur = conn.cursor()  # 建立遊標


import xlrd

# 開啟excel檔案,建立一個workbook物件
rbook = xlrd.open_workbook('test1.xls')
# sheets方法返回物件列表,[<xlrd.sheet.Sheet object at 0x103f147f0>]
rbook.sheets()
# xls預設有3個工作簿,Sheet1,Sheet2,Sheet3
rsheet = rbook.sheet_by_index(0)  # 取第一個工作簿

for row in rsheet.get_rows():
    classify_row = row[0]  # 分類所在的列
    content_row = row[1]
    classify_value = classify_row.value  # 分類的值
    if classify_value != '分類':  # 排除第一行
        content_value = content_row.value  # 內容的值
        # print(classify_value,content_value)
        sql = "INSERT INTO qunar.test(classify,content)VALUES ('%s',\'%s\')" % (classify_value, pymysql.escape_string(content_value))

        cur.execute(sql)
        conn.commit()  # 主動提交,否則執行sql不生效

cur.close()

執行指令碼,檢視mysql表

依然可以!

 

本文參考連結: