Хотелось бы помостреть пример законченного небольшого приложения с использованием sql alchemy.
Почитал tutorial и разобрался с примерами и вроде все понятно, но когда пытаюсь разбить все по класса - начинаются затруднения.
Простейший пример - у меня есть табличка где лежат наименования продуктов и есть форма, где я хочу их отображать.
Ок:
1. class Product - это сам класс продукта (который, кстати, с помощью mapper отображается на табличку СУБД)
2. class ProductForm - форма (gtk) - UI - представление данных пользователю
Дальше сложнее. Насколько я понимаю, экземпляр ProductForm должен запросить список продуктов у какого то другого класса. Назовем его DatabaseEngine. Его задача - работать с СУБД возвращать для UI наборы данных, а также осуществлять данные в СУБД по запросу UI.
Но тогда возникает вопрос - либо DatabaseEngine у нас - синглетон и мы должны постоянно хранить экземпляр этого объекта в программе, дабы запрашивать у него данные. Либо постоянно создавать его?
Второй вопрос - а когда надо делать все вот эти вещи:
self.engine = create_engine('sqlite:///database.db')
self.metadata = MetaData()
self.product_table = Table('product', self.metadata,
Column('name', String(30), primary_key = True),
Column('category', String(30)),
Column('fat', Integer),
Column('protein', Integer),
Column('carbo', Integer)
)
self.metadata.create_all(self.engine)
mapper(Product, self.product_table)
Session = sessionmaker(bind = self.engine)
self.session = Session()
а) один раз - при запуске программы?
б) каждый раз при обращении к DatabaseEngine - в его конструкторе ?
в) …..
Третий вопрос - а нужен ди один DatabaseEngine - для получения всех сущностей из СУБД или под каждую сущность создавтаь свой класс?