Python mysql.connector .fetchall() возвращает (избыточные) данные в разных форматах

#mysql-connector-python

#mysql-connector-python

Вопрос:

У меня есть этот метод для выполнения запросов:

 def exeQuery(query, data, dbEdit ):
try:
    myDatabase = mysql.connector.connect(**dbLoginInfo)
    cursor = myDatabase.cursor()
except mysql.connector.Error as e:
    print('[ERROR WHILE CONNECTING TO DATABASE]: ', e)
else:
    if dbEdit == True:
        if data == None:
            res = cursor.execute(query)
            myDatabase.commit()
        else:
            res = cursor.execute(query, data)
            myDatabase.commit()
    else:
        if data == None:
            cursor.execute(query)
            res = cursor.fetchall()
            
        else: 
            cursor.execute(query, data)
            res = cursor.fetchall()
            

cursor.close()
myDatabase.close()
#print(type(res))
#print(res)
return  res
 

И я называю это здесь:

 @app.route("/profil/delete", methods= ['POST'])
@token_required
def deleteProfil():
    dicUser = decodeToken(request.args.get('token'))
    profilName = request.args.get('profilName')

    path = exeQuery('SELECT profilbild FROM Profil WHERE profilName = %s AND konto_email = %s', (profilName, dicUser['user']), False)
    print(path)
    return Response(status = 200)
 

Он должен напечатать меня ('pics/jj@gmail.de/DelProf.png',) один раз.
По какой-то причине я получаю правильные данные, но иногда форматирование меняется. Каждый раз в базе данных была только одна строка, подходящая для запроса. Это три вывода, которые я получил до сих пор:

 [('pics/jj@gmail.de/DelProf.png',), ('pics/jj@gmail.de/DelProf.png',), ('pics/jj@gmail.de/DelProf.png',), ('pics/jj@gmail.de/DelProf.png',)]

[('pics/jj@gmail.de/DelProf.png',)]

('pics/jj@gmail.de/DelProf.png',)
 

Ответ №1:

Метод MySQLCursor.fetchall() возвращает список кортежей. как упоминалось здесь: https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-fetchall.html . Даже если результатов нет, он вернет a list , но пустой [] . Если вы получили список с повторяющимися значениями, возможно, что ваш запрос может найти эти совпадения.