Нужно, используя SQLAlchemy, написать несколько функций, выполняющих роль CRUD (создание, чтение, обновление, удаление).
Пример модели post:
id: integer (primary key) - идентификатор записи, генерится
автоматом в СУБД
title: varchar - заголовок поста, обязательное поле
body: varchar - текст поста
Пример описания с помощью SQLAlchemy:
class Post(Base):
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(Unicode, nullable=False)
body = Column(Unicode, nullable=False)Как получить сессию и базовую модель см. доку по алхимии. Ей же можно создавать и удалять таблицы.
Теперь, когда есть модель, нужно написать сами функции оперирования данными:
Предлагаю начать с создания:
def create_post(title: str, body:str) -> Post:
"""Your own implementation"""Пример:
post = create_post('Hey, guys!', 'A long text')
# Adding post to the session
session.add(post)
try:
# trying to flush the post to the database
session.commit()
except SQLAlchemyError as e:
# rolling the session back in order to prevent updates
session.rollback()
raise eЧтение поста, если есть идентификатор:
def get_post(id: int) -> Post or None:
"""Your own implementation"""
post = get_post(1) # post or NoneФильтрация постов по параметрам:
**kwargs может не быть, могут быть аттрибуты,
которых нет в самой модели, рекомендую
пользоваться hasattr(), getattr() и setattr()
def get_post_list(**kwargs):
"""Your own implementation"""
filtered_posts = get_post_list(title='y, guys')
# strings may use LIKE or ILIKE SQL statements
# integers should be compared equallyАлгоритм: пробежаться по **kwargs и обновить аттрибуты модели
В **kwargs может находиться все, что угодно, так что
рекомендую также пользоваться hasattr(), getattr() и setattr()
def update_post(post: Post, **kwargs) -> Post:
"""Your own implementation"""
post = get_post(1)
post = update_post(post, title='Hey, girls!')
try:
# you don't need to add existing post to the session
session.commit()
...Алгоритм: найти пост, удалить его через сессию
post = get_post(1)
def delete_post(post):
"""Your own implementation"""
try:
session.commit()
...Ради интереса спортивного, можно написать CLI-утилиту, позволяющую управлять всем вышенаписанным из консоли (http://click.pocoo.org/5/)