Здесь я создал два соединения 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