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 相关文章推荐
Django1.7+python 2.78+pycharm配置mysql数据库教程
Nov 18 Python
Python中使用Beautiful Soup库的超详细教程
Apr 30 Python
Python解析json文件相关知识学习
Mar 01 Python
Python中文分词实现方法(安装pymmseg)
Jun 14 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
Django页面数据的缓存与使用的具体方法
Apr 23 Python
python中如何使用insert函数
Jan 09 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
javascript 触发事件列表 比较不错
2009/09/03 Javascript
jQuery下的几个你可能没用过的功能
2010/08/29 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
一个JavaScript获取元素当前高度的实例
2014/10/29 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python中元组,列表,字典的区别
2017/05/21 Python
Python正则捕获操作示例
2017/08/19 Python
Python语言描述最大连续子序列和
2017/12/05 Python
Python 变量的创建过程详解
2019/09/02 Python
python修改FTP服务器上的文件名
2019/09/11 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
杠杆的科学教学反思
2014/01/10 职场文书
给护士表扬信
2014/01/19 职场文书
《美丽的丹顶鹤》教学反思
2014/04/22 职场文书
企业党员一句话承诺
2014/05/30 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript
MySQL的索引你了解吗
2022/03/13 MySQL