Mysql проблема множественного подключения в Python - PullRequest
3 голосов
/ 08 июля 2019

Здесь я создал два соединения MySQL с одной и той же базой данных.

Когда одно соединение обновляет базу данных, присутствующую в классе, другое соединение не может получить изменения.Вот мой код

tm (): класс базы данных, который обрабатывает соединение, выполняет запрос и получает обзор базы данных

class ClassB():
    b = None

    def __init__(self):
        self.b = database()

    def get_overview_for_b(self):
        self.b.mark_invalid('9')
        self.b.mark_invalid('8')
        b_str = ''.join(map(str, self.b.get_overview()))
        print("Getting the overview of b" + b_str)


# initializing class B
inside_class_b = ClassB()
# initializing class for A
a = database()

# get database overview for A
astart = a.get_overview()
a_str = ''.join(map(str, astart))
print("Getting the overview of a before testing" + a_str)

# updating database and get database overview for B
inside_class_b.get_overview_for_b()

# get another overview for A
aend = a.get_overview()
a_str = ''.join(map(str, aend))
print("Getting the overview of a after testing" + a_str)

# The final overview of both A and B should be same, but isn't

фактический вывод

Getting the overview of a before testing('PENDING', 2)
Getting the overview of b('INVALID', 2)
Getting the overview of a after testing('PENDING', 2)

ожидаетсявыходные данные

Getting the overview of a before testing('PENDING', 2)
Getting the overview of b('INVALID', 2)
Getting the overview of a after testing('INVALID', 2)

Хотя я только что попытался, если я использую 'a' для обновления, 'b' получает обновленные значения.

class ClassB():
    b = None

    def __init__(self):
        self.b = database()

    def get_overview_for_b(self):
        b_str = ''.join(map(str, self.b.get_overview()))
        print("Getting the overview of b" + b_str)


# initializing class B
inside_class_b = ClassB()
# initializing class for A
a = database()

# get database overview for A
astart = a.get_overview()
a_str = ''.join(map(str, astart))
print("Getting the overview of a before testing" + a_str)

# updating using 'a'
a.mark_invalid('9')
a.mark_invalid('8')

# get database overview for B
inside_class_b.get_overview_for_b()

# get another overview for A
aend = a.get_overview()
a_str = ''.join(map(str, aend))
print("Getting the overview of a after testing" + a_str)

Ожидаемые выходные данные и фактические выходные данные совпадают

Getting the overview of a before testing('PENDING', 2)
Getting the overview of b('INVALID', 2)
Getting the overview of a after testing('INVALID', 2)

РЕДАКТИРОВАТЬ Ниже приведена моя функция выполнения, используемая недействительным.При этом используется обычное соединение, которое каждый раз проверяется на состояние «Нет».

    def execute(self, statement, attributes):
        """
            Execute a query for the database
            :arg:
                statement - Statement to be executed.
                attributes - Attributes supporting the statement.
        """
        if self._db_connection is None:
            self.connect()
        cursor = self._db_connection.cursor()
        cursor.execute(statement, attributes)
        self._db_connection.commit()
        t = cursor.rowcount
        cursor.close()
        del cursor
        return t

1 Ответ

3 голосов
/ 09 июля 2019

В get_overview () не было команды commit. После добавления connection.commit () код работает как положено.

Проблема решена. Спасибо всем, кто мне помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...