Я хочу создать простую обертку вокруг sqlalchemy (python3.6), но я застрял в тот момент, когда сопоставлены классы сеансов и таблиц. Что мне теперь делать? Должен ли быть реализован DBManager для обеспечения взаимодействия со всеми таблицами (как правильно это реализовать?) Или он должен возвращать объект, который будет взаимодействовать с определенной таблицей / классом? Не уверен, какой подход правильный. Также впервые работаю с ORM. Спасибо за ваше время.
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import create_session, Session
from sqlalchemy.ext.automap import automap_base
class DBManager(metaclass=Singleton):
def __init__(self, config_path=''):
self._db_operator = None
self._db_config = {}
self._db_tables = {}
self._error = ''
if config_path:
self.load_config(config_path)
self.connect_to_database()
def connect_to_database(self):
self._clean()
DB_USER = ''
DB_PASS = ''
DB_HOST = ''
DATABASE = ''
DB_PORT = 3306
try:
DB_USER = self._db_config['DB_USER']
DB_PASS = self._db_config['DB_PASSWORD']
DB_HOST = self._db_config['DB_HOST']
DATABASE = self._db_config['DB_NAME']
except Exception as e:
pass
connection_string = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT,
DATABASE)
engine = create_engine(connection_string, echo=True)
session = Session(engine)
Base = automap_base()
Base.prepare(engine, reflect=True)
user = Base.classes.users
article = Base.classes.article
session.add(user(username='ohyeah'))
session.commit()