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 相关文章推荐
python3使用tkinter实现ui界面简单实例
Jan 10 Python
分享几道你可能遇到的python面试题
Jul 24 Python
python 文件操作删除某行的实例
Sep 04 Python
Python对多属性的重复数据去重实例
Apr 18 Python
Pythony运维入门之Socket网络编程详解
Apr 15 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
Aug 20 Python
使用 Python 处理3万多条数据只要几秒钟
Jan 19 Python
python_mask_array的用法
Feb 18 Python
Django ORM filter() 的运用详解
May 14 Python
Python decimal模块使用方法详解
Jun 08 Python
Python远程方法调用实现过程解析
Jul 28 Python
python实现网络五子棋
Apr 11 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
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
php后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
php实现的用户查询类实例
2015/06/18 PHP
php生成curl命令行的方法
2015/12/14 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
JavaScript中的isXX系列是否继续使用的分析
2011/04/16 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
2013/05/17 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
js跑步算法的实现代码
2013/12/04 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
在Python中使用next()方法操作文件的教程
2015/05/24 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
python文件及目录操作代码汇总
2020/07/08 Python
如何用Python绘制3D柱形图
2020/09/16 Python
Ado与Ado.net的相同与不同
2014/12/08 面试题
承诺书范文
2014/06/03 职场文书
读群众路线的心得体会
2014/09/03 职场文书
大学感恩节活动总结
2015/05/05 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
Python机器学习之底层实现KNN
2021/06/20 Python