Можете ли вы хранить байты (токен Fernet) в таблице MySQL?питон - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь вставить этот зашифрованный 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)

1 Ответ

0 голосов
/ 26 декабря 2018

Если есть 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 байтовый массив хранения

...