pymysql 插入数据 转义处理方式
最近用pymysql把一些质量不是很高的数据源导入mysql数据库的时候遇到一点问题,主要是遇到像\这样的具有特殊意义的字符时比较难处理。这里有一个解决方案
基本环境
python3
pymysql
linux
问题描述
插入(查询)数据时遇到一些特殊字符会使得程序中断。操作失败。比如\这样的转义字符
解决方案
插入(查询)之前用connection.escape(str)处理一下即可
代码示例
importpymongo sql_pattern="select*frommy_collectionwherename=%s"#注意,这里直接用%s,不要给%s加引号,因为后面转移过后会自动加引号 name="xxx\xxx" name=connection.escape(name) sql=sql_pattern%name print(sql)#select*frommy_collectionwherename='xxx\\xxx' withconnection.cursor()ascursor: try: cursor.execute(sql) except: print(sql) pass forrincursor: print(r)
补充拓展:利用pymysql往数据库插入百万条数据
思路:
先创建一个自定义的数据库表;
生成一个列表,列表中的数据应该和数据库表中的每一列对应;
利用cursor.executemany批量插入列表中的数据。
注意点:
批量添加数据时,数据格式必须list[tuple(),tuple(),tuple()]或者tuple(tuple(),tuple(),tuple())
代码解析:
#-*-coding:utf-8-*- #Author:benjamin importpymysql #创建连接 conn=pymysql.connect(host='192.168.214.128',port=3306,user='root',passwd='ben123',db='db2') #创建游标 cursor=conn.cursor() defcreateTable(): ''' 创建数据库表 :return: ''' try: sql=''' createtablemytable( nidintnotnullauto_incrementprimarykey, namevarchar(255)notnull, emailvarchar(255)notnull, extratext )engine=innodbdefaultcharset=utf8 ''' cursor.execute(sql) conn.commit() print('createtableok!') exceptExceptionase: print(e) defmyList(value): ''' 生成一个列表,[('admin1','admin1qq.com','hahaadmin1'),...] :paramvalue:自定义的数据量 :return:new_list ''' new_list=[]#新建一个空列表用来存储元组数据 foriinrange(1,value+1): name='admin'+str(i) email=name+'@qq.com' extra='Iam'+name tup=(name,email,extra)#构造元组 new_list.append(tup)#[(),(),()...] print("*"*5+"generatelistok"+"*"*5) returnnew_list defmyInsert(newList): ''' 数据库插入 :paramnewList:传入的列表数据 :return: ''' try: sql="insertintomytable(name,email,extra)values(%s,%s,%s)"#要插入的数据 cursor.executemany(sql,newList)#执行插入数据 conn.commit() cursor.close() conn.close() print('insertok') exceptExceptionase: print(e) if__name__=='__main__': #创建数据表 createTable() #选择要插入的数据量 value=1000000#定义数据量 newList=myList(value) myInsert(newList)
以上这篇pymysql插入数据转义处理方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。