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天气预报采集器实现代码(网页爬虫)
Oct 07 Python
python获取豆瓣电影简介代码分享
Jan 16 Python
python查询mysql中文乱码问题
Nov 09 Python
解析Python中的异常处理
Apr 28 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 Python
Python 分享10个PyCharm技巧
Jul 13 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
django中间键重定向实例方法
Nov 10 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
Python实现冒泡排序算法的完整实例
Nov 04 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 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 has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
PHP实现获取中英文首字母
2015/06/19 PHP
joomla数据库操作示例代码
2016/01/06 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
简述AngularJS相关的一些编程思想
2015/06/23 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
微信小程序自定义底部弹出框
2020/11/16 Javascript
vue多次循环操作示例
2019/02/08 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
[33:42]LGD vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
Python获取服务器信息的最简单实现方法
2015/03/05 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
python pandas 对时间序列文件处理的实例
2018/06/22 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
应届毕业生个人自荐信范文
2013/11/30 职场文书
垃圾桶标语
2014/06/24 职场文书
面试通知邮件
2015/04/20 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS