проектирование класса для CRUD из базы данных - PullRequest
0 голосов
/ 03 мая 2020

Я пишу класс для объекта базы данных.

class Pollution:

    # set class variables
    table_name = "pollution"
    def __init__(self, input_dict={}):
        # set instance variable
        self.datetime_id = int(input_dict["DateTime"])
        self.RoadsideNitricOxide = float(input_dict["RoadsideNitricOxide"])
        ...

Я создаю экземпляр класса с помощью pol = Pollution(input_dict)

Это полезно для вставки данных в базу данных. У меня есть функция для вставки данных, которая выглядит следующим образом (я знаю, что здесь есть некоторые плохие практики, self._dict__ и конкатенация запросов)

def record_create(self):
# We need to build a string that looks like "INSERT INTO pollution VALUES (?,?,?,?,?)"
   record_tuple = tuple(self.__dict__.values())
   if isinstance(record_tuple, tuple):
       substitution = ",".join(["?"] * len(record_tuple))
       sqltext = "INSERT INTO " + self.table_name + " VALUES (" + substitution + ")"
       return self.__db_query(sqltext, record_tuple)

Однако я застрял, как структурировать это для чтения данных из база данных. Я представляю, как создать экземпляр класса, а затем вызвать метод чтения.

read_record = Pollution() - в настоящее время возвращает ошибку, потому что метод __init__ ожидает диктовку.

Если я хотел сделать что-то вроде read_record_from_db = Pollution().read_record("id"="1") - как должна писать функция read_record () к переменным экземпляра? Я думаю об использовании сеттера, но у меня есть 14 переменных / полей экземпляра в БД, и это будет тонна шаблонного примера, которого мне действительно нужно избегать, потому что конечный продукт будет обрабатывать действительно огромное количество столбцов.

РЕДАКТИРОВАТЬ:

Классовые методы, кажется, являются «стандартным» ответом на это. Я также играл с:

    def __init__(self, input_dict):
        self.datetime_id   = int(input_dict.get("DateTime", 0)

Это может быть немного неприятно, однако?

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