如何在没有Python类型转换的情况下保存Hex的文本字符串,即就像纯文本一样
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在没有Python类型转换的情况下保存Hex的文本字符串,即就像纯文本一样相关的知识,希望对你有一定的参考价值。
Python 3.6,Sqlite3。
我有一些接受用户输入的代码,并将其存储为名为uinput的变量。我已经确认这是由Python保存为Str类型。
uinput = input ("enter the string: ")
print("Type of uinput is:",type(uinput))
给出输出
Type of uinput is: <class 'str'>
uinput将始终是格式0x然后是40个字符,或者只是40个字符(我有一些其他逻辑在尝试更新数据库之前验证这一点 - 这个位正常工作)。
到目前为止,我的测试一直使用0x然后40个字符格式,例如0x689C56AEf474Df92D44A1B70850f808488F9769D
我知道我可以执行以下操作来删除0x前缀,因此如果uinput.startswith((“0X”,“0x”)),则DB UPDATE是一致的样式:uinput = uinput [2:]
但是当我尝试将其写入我的Sqlite数据库时,脚本会冻结,我相信这是因为Python将Hex转换为另一种格式,而不是将其作为字符串传递。
#conn2 declared earlier, and is available to this function
cur = conn2.cursor()
cur.execute("UPDATE db1 SET myhex=? WHERE ID=123", (uinput))
conn2.commit()
如果我在命令行进入sqlite3并手动尝试UPDATE命令,我收到以下错误:错误:十六进制文字太大:0x689C56AEf474Df92D44A1B70850f808488F9769D
- 这就是我认为Python正在进行某种类型转换的原因。
我想要做的就是将它存储为一个字符串,就像print(uinput)命令所示(我猜它在后台会进行自己的类型转换!)...例如“0x689C56AEf474Df92D44A1B70850f808488F9769D”或“689C56AEf474Df92D44A1B70850f808488F9769C”,或者是精细。
它需要采用这种格式,因为数据库是人类可读的(通过csv导出),所以我不想再将其转换回来获取最初由用户提交的ascii)
我相信这将是一件简单的事情,但我已经花了将近2个小时才解决这个问题,而且我已经没想完了!
谢谢
睡着了,今天用新鲜的大脑接近它,我找到了一个似乎有效的解决方案。
cur = conn2.cursor()
sql_query= "UPDATE db1 SET myhex=? WHERE ID=123"
cur.execute(sql_query, (str(uinput))
conn2.commit()
...基本上在执行期间强制变量为字符串。
我之前曾尝试过这种变体,并猜测它的解析方式必然会有细微差别。
cur.execute("UPDATE db1 SET myhex=? WHERE ID=123", (str(uinput)))
^^^这没用
以上是关于如何在没有Python类型转换的情况下保存Hex的文本字符串,即就像纯文本一样的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中将 HEX 转换为无符号 INT16 [重复]