pymysql 插入資料 轉義處理方式
阿新 • • 發佈:2020-03-11
最近用pymysql把一些質量不是很高的資料來源匯入mysql資料庫的時候遇到一點問題,主要是遇到像 \ 這樣的具有特殊意義的字元時比較難處理。這裡有一個解決方案
基本環境
python3
pymysql
linux
問題描述
插入(查詢)資料時遇到一些特殊字元會使得程式中斷。操作失敗。比如 \這樣的轉義字元
解決方案
插入(查詢)之前用 connection.escape(str)處理一下即可
程式碼示例
import pymongo sql_pattern = "select * from my_collection where name = %s" #注意,這裡直接用%s,不要給%s加引號,因為後面轉移過後會自動加引號 name = "xxx\xxx" name = connection.escape(name) sql = sql_pattern%name print(sql) # select * from my_collection where name = 'xxx\\xxx' with connection.cursor() as cursor: try: cursor.execute(sql) except: print(sql) pass for r in cursor: print(r)
補充拓展:利用 pymysql 往資料庫插入百萬條資料
思路:
先建立一個自定義的資料庫表;
生成一個列表,列表中的資料應該和資料庫表中的每一列對應;
利用cursor.executemany 批量插入列表中的資料。
注意點:
批量新增資料時,資料格式必須list[tuple(),tuple(),tuple()] 或者tuple(tuple(),tuple())
程式碼解析:
# -*- coding: utf-8 -*- # Author:benjamin import pymysql # 建立連線 conn = pymysql.connect(host='192.168.214.128',port=3306,user='root',passwd='ben123',db='db2') # 建立遊標 cursor = conn.cursor() def createTable(): ''' 建立資料庫表 :return: ''' try: sql = ''' create table mytable ( nid int not null auto_increment primary key,name varchar(255) not null,email varchar(255) not null,extra text )engine=innodb default charset=utf8 ''' cursor.execute(sql) conn.commit() print('create table ok!') except Exception as e: print(e) def myList(value): ''' 生成一個列表,[('admin1','admin1qq.com','hahaadmin1'),...] :param value: 自定義的資料量 :return: new_list ''' new_list = [] # 新建一個空列表用來儲存元組資料 for i in range(1,value + 1): name = 'admin'+ str(i) email = name + '@qq.com' extra = 'I am '+ name tup = (name,email,extra) # 構造元組 new_list.append(tup) # [(),(),()...] print("*"*5+"generate list ok"+"*"*5) return new_list def myInsert(newList): ''' 資料庫插入 :param newList: 傳入的列表資料 :return: ''' try: sql = "insert into mytable(name,extra) values(%s,%s,%s)" # 要插入的資料 cursor.executemany(sql,newList) # 執行插入資料 conn.commit() cursor.close() conn.close() print('insert ok') except Exception as e: print(e) if __name__ == '__main__': # 建立資料表 createTable() # 選擇要插入的資料量 value = 1000000 # 定義資料量 newList = myList(value) myInsert(newList)
以上這篇pymysql 插入資料 轉義處理方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。