如何在没有Python类型转换的情况下保存Hex的文本字符串,即就像纯文本一样

问题描述 投票:0回答:1

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个小时才解决这个问题,而且我已经没想完了!

谢谢

python-3.x sqlite hex
1个回答
0
投票

睡着了,今天用新鲜的大脑接近它,我找到了一个似乎有效的解决方案。

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)))

^^^这没用

© www.soinside.com 2019 - 2024. All rights reserved.