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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。