Перенос кода в Debian вызвал ошибки «Использовать multi = True при выполнении нескольких операторов»

#python #python-3.x #mysql-python

#python #python-3.x #mysql-python

Вопрос:

Я запускал скрипты python, вызывающие MySQL на компьютере с Ubuntu 20.04 LTS. Я только недавно перенес эти скрипты на сервер под управлением Debian 10.

На обоих серверах установлен MySQL 8.0.21. Python 3.7.3 находится на сервере Debian, а Python 3.8.2 — на Ubuntu. Когда я выполняю скрипты python на сервере Debian, я получаю следующее сообщение об ошибке:

Use multi=True when executing multiple statements

Я не вносил никаких изменений в код, поэтому я не уверен, почему я получаю это сообщение на сервере Debian, но не на сервере Ubuntu.

Вот раздел в скрипте, который вызывает ошибку:

 cursor = dbconn.cursor(dictionary=True)

# get next scheduled event to be aired
sql = "CALL GetEvent();"
cursor.execute(sql)

result = cursor.fetchone()
cursor.close()

if result:  
    eventtime = str(result["eventtime"])

    # the max seconds we are going to wait is 60
    init_waitseconds = timediffinseconds(eventtime)
    if init_waitseconds > 61:
        waitseconds = 60
    else:
        waitseconds = init_waitseconds

    # wait for specified time
    print_stdout(f"{bcolors.CGREEN}[EVENT_MONITOR]{bcolors.ENDC} Waiting for next scheduled event at {eventtime}")
    time.sleep(waitseconds)
  

Вызываемая хранимая процедура выглядит следующим образом:

 CREATE DEFINER=`root`@`localhost` PROCEDURE `GetEvent`()
BEGIN
    
    DECLARE v_DayName CHAR(9);    
    SET v_DayName := DAYNAME(CURRENT_DATE);
    
    SELECT e.name, e.eventaction, e.data, e.extra, et.eventday, et.eventtime, et.recurring
        FROM event e
        INNER JOIN eventtime et ON et.eventID = e.ID
        WHERE et.eventdate = CURDATE() AND et.recurring = 'No' AND e.enabled = 1 AND et.eventtime > CURRENT_TIME() OR           
            et.eventday = 'v_DayName' AND et.recurring = 'Yes' AND e.enabled = 1 AND et.eventtime > CURRENT_TIME() OR
            et.eventday = 'Day' AND et.recurring = 'Yes' AND e.enabled = 1 AND et.eventtime > CURRENT_TIME() OR
            CASE WHEN IsWeekday('v_DayName') = True THEN et.eventday = 'Mon-Fri' END AND e.enabled = 1 AND et.eventtime > CURRENT_TIME() OR
            CASE WHEN IsWeekend('v_DayName') = True THEN et.eventday = 'Sat-Sun' END AND e.enabled = 1 AND et.eventtime > CURRENT_TIME()
        ORDER BY et.eventtime
        LIMIT 1;
END
  

Кроме того, этот раздел моего скрипта на python вызывает ту же ошибку:

 cursor = dbconn.cursor(dictionary=True)

# CheckQueueCount MySQL procedure retrieves how many tracks are currently in queuelist table
sql = "CALL CheckQueueCount"
cursor.execute(sql)

result = cursor.fetchone()
ret = result["QueueCount"]
cursor.close()
return ret
  

И хранимая процедура, которую она вызывает:

 CREATE DEFINER=`root`@`localhost` PROCEDURE `CheckQueueCount`()
BEGIN

    SELECT COUNT(ID) AS QueueCount FROM queuelist;
    
END
  

Комментарии:

1. Какой (Python) пакет вы используете для подключения к базе данных? Одинакова ли версия на обеих машинах?

2. Я предполагаю, что вы имеете в виду mysql-connector. Как мне проверить их, чтобы узнать, какие версии установлены?

3. pip list | grep -i 'mysql-connector' , заботясь о том, чтобы использовать правильную версию pip .

Ответ №1:

Хорошо, я считаю, что я решил проблему. Я удалил соединитель, который был установлен с помощью команды:

 sudo pip3 install mysql-connector
  

и вместо этого установил его с:

 sudo pip3 install mysql-connector-python
  

Ошибки исчезли.