我正在尝试将此Fernet加密令牌插入数据库中的表中。它是有关侦察兵的加密医疗信息
b'gAAAAABcIRmX3txIuOrw6FoSxy7I1vorA8hTTzMcXQGwch_jRBtWTsR9TwVyH125K0R6zG-BTvhv_SpZuW-Hs1WotaabBVj5tQ=='
通过使用此插入语句
sqlcommand = "INSERT INTO scoutinfo (scoutID, firstname,secondname,age,gender,ethnicity,address,postcode,medicalinfo,parentID,patrolID,userID) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
ScoutInput = (
str(ScoutID), FName.get(), SName.get(), str(Age.get()), str(Gender.get()), str(Ethnicity.get()), Address.get(),
Postcode.get(), EcryptMedInfo, str(ParentID[0]), str(PatrolID), str(UserID))
mycursor.execute(sqlcommand, ScoutInput)
运行时,程序将执行,但是插入操作不会应用于表,并且不会,我没有忘记mydb.commit()
。我相信bytes
是MySQL不支持的数据类型,因此无法存储。在这种情况下,我将如何克服这个问题,以便能够通过以下方式解密存储的令牌:
Ecy.decrypt(EcryptMedInfo)
答案 0 :(得分:0)
如果有b""
,并且您想将其转换为字符串。您应该使用decode()
而不是str()
。因为如果使用str()
很难将其反转,但是如果使用decode()
则很容易。
a = b"\x00\x00"
print((a,a.decode(),str(a)))
print(a == a.decode().encode())
#(b'\x00\x00', '\x00\x00', "b'\\x00\\x00'")
#True
当我使用
mysql.connector
时,我不必自己将它们转换为字符串。
import mysql.connector as mysql
from base64 import b64encode, b64decode
conn = mysql.connect(user="kr",passwd="kr",db="kr")
cur = conn.cursor()
def go(stat,param=None):
try:
cur.execute(stat,param)
conn.commit()
except Exception as e:
conn.rollback()
print(e)
go("""
CREATE TABLE test(
col varchar(90) NOT NULL
)""")
something = b64encode(b"\x00\x00")
print(something,type(something))
go(stat="""INSERT INTO test (col) VALUES (%s)""", param=[something])
cur.execute("SELECT col from test")
result = cur.fetchone()[0]
print([b64decode(result)])
#b'AAA=' <class 'bytes'>
#[b'\x00\x00']
我相信字节是MySQL不支持的数据类型,因此无法存储。
Mysql可以存储它。 Mysql byte array storage