最近用pymysql把一些质量不是很高的数据源导入mysql数据库的时候遇到一点问题,主要是遇到像\这样的具有特殊意义的字符时比较难处理。这里有一个解决方案
<>强基本环境强>
python3
引用>
pymysql
linux<强>问题描述强>
插入(查询)数据时遇到一些特殊字符会使得程序中断。操作失败。比如\这样的转义字符
<>强解决方案强>
插入(查询)之前用connection.escape (str)处理一下即可
<强>代码示例强>
进口pymongo 从my_collection sql_pattern=" select * name=% s " #注意,这里直接用% s,不要给% s加引号,因为后面转移过后会自动加引号 name=" xxx \ xxx” name=connection.escape(名字) sql=sql_pattern %的名字 打印(sql) # select *从my_collection name=' xxx xxx \ \ ' 光标connection.cursor (): 试一试: cursor.execute (sql) 除了: 打印(sql) 通过 r的游标: 打印(右) >之前
<>强思路:强>
先创建一个自定义的数据库表;
生成一个列表,列表中的数据应该和数据库表中的每一列对应的;
利用游标。executemany批量插入列表中的数据。
<强>注意点:强>
批量添加数据时,数据格式必须列表(元组()元组()元组())或者元组(tuple()元组()元组())
<强>代码解析:强>
# - * -编码:utf - 8 - * #作者:本杰明 进口pymysql # 创建连接 康涅狄格州=pymysql.connect(主机=192.168.214.128,端口=3306,用户=?passwd=ben123, db=癲b2”) #创建游标 光标=conn.cursor () def不知道(): “‘ 创建数据库表 返回: “‘ 试一试: sql=? 创建表mytable ( nid int not null auto_increment主键, 名字varchar(255)非空, 电子邮件varchar(255)非空, 额外的文本=innodb默认字符集=utf8)引擎 “‘ cursor.execute (sql) conn.commit () print(创建表好了!) 除了例外e: 打印(e) def myList(价值): “‘ 生成一个列表,(“admin1”、“admin1qq.com”,“hahaadmin1”),…] :参数值:自定义的数据量 返回:new_list “‘ new_list=[] #新建一个空列表用来存储元组数据 我的范围(1,值+ 1): name='管理' + str(我) 电子邮件=名称+“@qq.com” 额外的=拔摇?名字 锤头=(名称、电子邮件、额外)#构造元组 new_list.append(锤头)#【(),(),()…] 打印(“*”* 5 +“生成列表ok”+“*”* 5) 返回new_list def myInsert (newList): “‘ 数据库插入 :param newList:传入的列表数据 返回: “‘ 试一试: sql="插入mytable(名称、电子邮件、额外)值(% s, % s % s)”#要插入的数据 newList cursor.executemany (sql) #执行插入数据 conn.commit () cursor.close () conn.close () 打印(“插入行”) 除了例外e: 打印(e) if __name__==癬_main__”: #创建数据表 不知道() #选择要插入的数据量 值=https://www.yisu.com/zixun/1000000定义数据量 newList=myList(值) myInsert (newList)以上这篇pymysql插入数据转义处理方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
pymysql插入数据转义处理方式