Использование базы данных postgresql в режиме OOP в Python3 - PullRequest
0 голосов
/ 12 февраля 2019

Итак, вернемся к статусу noob.Я пытаюсь преобразовать свое мышление в ООП из простых сценариев.У меня есть подпрограмма Python, которая работает и т.д., но я хочу, чтобы ООП его.Я застрял там, где я хотел бы пройти / вернуться между классами.

Поэтому я рассматриваю соединение с базой данных как объект.

У меня есть другой объект Pointcloud, у которого есть подкласс / дочерний класс Surface (Pointcloud).

Поверхность должна подключитьсяв базу данных, выберите несколько записей и закройте соединение.Это хранится в классе Connect (хотя до сих пор не уверен, как заставить работать cur.close ()).

Как только я выясню это, я буду на пути к ООП (надеюсь),Как только мой разум придет в правильное мышление, жизнь станет намного легче.Поэтому, пожалуйста, не могли бы вы взглянуть на мой код и объяснить / привести пример того, как это должно быть?Объекты Connect, Pointcloud, Surface работают индивидуально.

import dbconfig
import psycopg2


class Connect:
    def __init__(self, schema):
        self.schema = schema

    @staticmethod
    def get_connection():
        conn = psycopg2.connect(host=dbconfig.DATABASE_CONFIG['host'],
                                user=dbconfig.DATABASE_CONFIG['user'],
                                password=dbconfig.DATABASE_CONFIG['password'],
                                dbname=dbconfig.DATABASE_CONFIG['dbname'])
        print('connection made')
        return conn
    # add error catching

    @staticmethod
    def close_connection():
        # implement cur.close()
        # print('connection closed')
        pass


class Pointcloud:
    def __init__(self, photobatch):
        self.photobatch = photobatch

    def list_pointclouds(self):
        return '{}'.format(self.photobatch)


class Surface(Pointcloud):

    def __init__(self, photobatch, surface_type):
        super().__init__(photobatch)
        self.surface_type = surface_type
        # this inherits all the Pointcloud attributes
        # so each surface is a type of pointcloud
        # we add the surface type so we can distinguish between top and base surfaces
        # which is an attribute of this instance

    def import_pointcloud(self):
        # connect to database
        print('connecting')
        Connect.get_connection()

        # do some database stuff to import the pointcloud and construct a numpy array

        Connect.close_connection()

        # return the resulting numpy array


class Bounding(Pointcloud):
    # a different subclass of pointcloud
    pass 
...