Я пишу класс для объекта базы данных.
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)
Это может быть немного неприятно, однако?