1. 程式人生 > 資料庫 >pymysql 插入資料 轉義處理方式

pymysql 插入資料 轉義處理方式

最近用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 插入資料 轉義處理方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。