pymysql 插入数据 转义处理方式


Posted in Python onMarch 02, 2020

最近用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(),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,email,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 插入数据 转义处理方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python下Fabric的简单部署方法
Jul 14 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
利用PyInstaller将python程序.py转为.exe的方法详解
May 03 Python
django使用xlwt导出excel文件实例代码
Feb 06 Python
Python操作MySQL数据库的方法
Jun 20 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
Python List cmp()知识点总结
Feb 18 Python
梅尔频率倒谱系数(mfcc)及Python实现
Jun 18 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
Python Opencv轮廓常用操作代码实例解析
Sep 01 Python
python request 模块详细介绍
Nov 10 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 Python
python实现字符串和数字拼接
Mar 02 #Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 #Python
基于Python爬取爱奇艺资源过程解析
Mar 02 #Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
Mar 02 #Python
Python处理mysql特殊字符的问题
Mar 02 #Python
新手入门学习python Numpy基础操作
Mar 02 #Python
python中数据库like模糊查询方式
Mar 02 #Python
You might like
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
IE下js调试工具Companion.JS
2010/10/15 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
node.js中的console.time方法使用说明
2014/12/09 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
基于css3实现漂亮便签样式
2013/03/18 HTML / CSS
介绍一下游标
2012/01/10 面试题
信用社实习人员自我鉴定
2013/09/20 职场文书
房屋改造计划书
2014/01/10 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
40岁生日感言
2014/02/15 职场文书
美丽乡村建设实施方案
2014/03/23 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
无犯罪记录证明
2014/09/19 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
PyTorch中permute的使用方法
2022/04/26 Python
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技