programing

mysql.connector python prepared 문이 byearray에 문자열을 반환하는 이유

yoursource 2023. 1. 15. 13:15
반응형

mysql.connector python prepared 문이 byearray에 문자열을 반환하는 이유

환경: Python 3.5.2, MySQL.MariaDB Server 10.1.14의 커넥터 2.0.4

표준 커서가 일반 문자열을 반환하는 반면 준비된 커서가 문자열 값을 반환하는 이유는 무엇입니까?

같은 인스턴스가 있는 같은 콜의 경우 [Prepared Cursor Outputs]:

[(11, bytearray(b'1234567890'), None),
 (17, bytearray(b'1234567799'), bytearray(b'abc@outlook.com'))]

표준 버전은 원하는 출력을 제공합니다.

[(11, '1234567890', None),
 (17, '1234567799', 'abc@outlook.com')]

표준 버전 코드:

def query_userdb(query, arg):
    retVal = None
    cnx = mariadb.connect(**DB_CONFIG_USERS)
    cursor = cnx.cursor()
    cursor.execute(query, arg)
    if cursor.rowcount != 0:
        retVal = cursor.fetchall()
    cnx.commit()
    cnx.close()
    return retVal

그리고 준비된 버전의 경우 커서 선언을 다음과 같이 변경했을 뿐입니다.

    cursor = cnx.cursor(prepared=True)

준비된 커서가 문자열을 올바르게 반환하도록 하려면 어떻게 해야 합니까?

사용할 수 있는 문자열을 얻으려면:

my_bytearray.decode("utf-8")

목록 이해를 사용하는 경우:

retVal = [(id,col2.decode("utf-8"),col3.decode("utf-8") for id,col2,col3 in retVal]

취급하는 .None의 값: " " " 。

retVal = [(id,col2.decode("utf-8"),(col3 if col3 is None else col3.decode("utf-8")) for id,col2,col3 in retVal]

언급URL : https://stackoverflow.com/questions/38288862/why-mysql-connecter-python-prepared-statement-returns-string-in-bytearray

반응형