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自动化工具日志查询分析脚本代码实现
Nov 26 Python
在Python中编写数据库模块的教程
Apr 29 Python
python实现斐波那契数列的方法示例
Jan 12 Python
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 Python
Python的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
Python 判断 有向图 是否有环的实例讲解
Feb 01 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
Python运行不显示DOS窗口的解决方法
Oct 22 Python
python找出一个列表中相同元素的多个索引实例
Jun 11 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 Python
python实现简单石头剪刀布游戏
Oct 24 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
用PHP函数解决SQL injection
2006/12/09 PHP
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
google地图的路线实现代码
2009/08/20 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
js综合应用实例简单的表格统计
2013/09/03 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
Python 多线程实例详解
2017/03/25 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
卫生院健康教育实施方案
2014/06/07 职场文书