python pymysql 存储binary数据类型

python pymysql 存储binary数据类型

背景:
对pcap文件进行操作,生成新的pcap文件,为了能够更方便的重现用例,采用mysql进行存储pcap的内容,之后从数据库中读取数据生成pcap文件,进行后续测试。

with open('test.pcap', 'rb') as f:
	fp = f.read()
	print(fp)

打印的fp内容显示是这样的格式:

# fp \xaa\xcd\x01......

以16进制形式的字节流。
考虑以原本形式储存到数据库中,这样在查询读取后能够直接f.write()生成新的pcap文件。
过程:
mysql支持有binary,varbinary两种binary类型数据存储,目前我是在windows下navicate下存储,打开可视化界面看不到结果,乱码,不过不影响数据库查询到的数据。可能是由于编码问题。

# 连接数据库
# 略过 
db = pymysql.connect()

后面说一下在使用时出现的问题,以及使用方式。一开始我是这样写的:为什么这样写,是因为我看的很多对于mysql的连接插入数据基本就是这样写的(狗头)

sql = "INSERT INTO table (data, pcap) VALUES('{}','{}')".format(data, pcap)
cursor = db.cursor()
cursor.execute(sql)
db.commit()

这样执行,数据是插入不进行去,报的是编码问题。后来发现是格式化输入.format()这个函数:

    def format(self, *args, **kwargs): # known special case of str.format
        """
        S.format(*args, **kwargs) -> str
        
        Return a formatted version of S, using substitutions from args and kwargs.
        The substitutions are identified by braces ('{' and '}').
        """
        pass

注释第一行 -> str。返回结果是个字符串格式,和设计的数据库字段类型binary不一致。看来.format()这种方式不能进行写入。
目前采用的方法是:

sql = "INSERT INTO table (data, pcap) VALUES(%s, %s)"
cursor.execute(sql, (data, pcap))

execute直接传递参数的形式。
也可能会有类似的waring

 Warning: (1300, "Invalid utf8mb4 character string: 'AA'")

更改成:

sql = "INSERT INTO table (data, pcap) VALUES(_binary %s, _binary %s)"
cursor.execute(sql, (data, pcap))

总结:
还是对细节方面把握不好,再接再厉。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值