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中各种方法的运作原理
Jun 15 Python
python黑魔法之参数传递
Feb 12 Python
python3操作mysql数据库的方法
Jun 23 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
Python获取指定文件夹下的文件名的方法
Feb 06 Python
Pyqt5实现英文学习词典
Jun 24 Python
django框架ModelForm组件用法详解
Dec 11 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
Sep 22 Python
Python 定义只读属性的实现方式
Mar 05 Python
python如何判断IP地址合法性
Apr 05 Python
windows python3安装Jupyter Notebooks教程
Apr 13 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语言构造器介绍
2013/07/08 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
js 日期比较相关天数代码
2014/04/02 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
jQuery超酷平面式时钟效果代码分享
2020/03/30 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
ES6数组的扩展详解
2017/04/25 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
微信小程序实现页面浮动导航
2020/01/08 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
详解Python3中的Sequence type的使用
2015/08/01 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
2020/03/06 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
使用django自带的user做外键的方法
2020/11/30 Python
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
学校司机岗位职责
2013/11/14 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
销售竞赛活动方案
2014/08/23 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
个人年度总结报告
2015/03/09 职场文书
闪闪红星观后感
2015/06/08 职场文书
使用HttpSessionListener监听器实战
2022/03/17 Java/Android
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技