Python 3 - Ошибка слабой ссылки на курсоре при использовании коннектора MySQL - PullRequest
0 голосов
/ 18 июня 2020

Проблемы с пониманием того, что не так с каким-то красивым кодом c Python 3. Это класс базы данных, использующий соединитель MySQL, который затем наследуется в другом классе.

Класс базы данных (database.py):

import mysql.connector

config = {
    'host': 'localhost',
    'user': '...',
    'password': '...',
    'database': '...'
}

class Database:

    def __init__(self):
        self.connect()

    def connect(self):
        try:
            db = mysql.connector.connect(**config)
            self.cursor = db.cursor()
        except mysql.connector.Error as err:
            print(err.msg)
            return False

Класс, наследующий класс базы данных:

import mysql.connector
import datetime
from database import Database

class Logger(Database):

    def __init__(self):
        super().__init__()

    def get_row(self, id):
        try:
            sql = ("SELECT * FROM logs WHERE id = %s")
            self.cursor.execute(sql, (id,))
            result = cursor.fetchone()
            return result
        except mysql.connector.Error as err:
            print(err.msg)
            return False

И вызывающий код ...

obj = Logger()
data = obj.get_row(2)

Ошибка слабой ссылки (на курсоре):

Traceback (most recent call last):
  File "examples.py", line 71, in <module>
   data = obj.get_row(2)
 File "examples.py", line 28, in get_row
   self.cursor.execute(sql, (id,))
ReferenceError: weakly-referenced object no longer exists

Что я здесь не понимаю? Я знаю, что ошибка c связана с использованием коннектора MySQL, поскольку я читал, что он использует слабые ссылки. Я просто смущен тем, как я могу повторно использовать / поддерживать ссылку на атрибут cursor родительского класса правильно в моих методах унаследованного класса. Заранее спасибо!

...