Skip to content

Instantly share code, notes, and snippets.

@Yuffster
Created December 18, 2019 01:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Yuffster/178caf6eafddda9be3d0fb790a21eb72 to your computer and use it in GitHub Desktop.
Save Yuffster/178caf6eafddda9be3d0fb790a21eb72 to your computer and use it in GitHub Desktop.
sqlalchemy base model
class DBModel():
def save(self):
try:
s = get_session()
s.add(self)
s.commit()
except (sa.exc.IntegrityError):
raise x.ValidationError("Invalid data.")
def delete(self):
s = get_session()
s.delete(self)
s.commit()
@classmethod
def _query(cls, **kwargs):
s = get_session()
q = s.query(cls).filter_by(**kwargs)
return q
@classmethod
def first(cls, **kwargs):
return cls._query(**kwargs).first()
@classmethod
def list(cls, page=1, page_size=None, order_by=None, desc=False):
if page_size is None:
page_size = app.config.get('PAGE_SIZE', 10)
s = get_session()
q = s.query(cls)
if order_by is not None:
if desc is True:
order = sa.desc(order_by)
else:
order = order_by
q = q.order_by(order)
return (
q.limit(page_size)
.offset(page_size*(page-1))
.all()
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment