Sitemap generator
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
852 B

4 years ago
  1. from sqlalchemy import create_engine
  2. from sqlalchemy.ext.declarative import declarative_base
  3. from sqlalchemy.orm import sessionmaker, scoped_session
  4. from sqlalchemy.sql import ClauseElement
  5. DB_URI = 'sqlite:///stuff.db'
  6. db_endine = create_engine(DB_URI)
  7. session = scoped_session(
  8. sessionmaker(
  9. autocommit=False,
  10. autoflush=False,
  11. bind=db_endine
  12. )
  13. )
  14. Model = declarative_base()
  15. def get_or_create(session, model, defaults=None, **kwargs):
  16. instance = session.query(model).filter_by(**kwargs).first()
  17. if instance:
  18. return instance, False
  19. else:
  20. params = dict((k, v) for k, v in kwargs.items() if not isinstance(v, ClauseElement))
  21. params.update(defaults or {})
  22. instance = model(**params)
  23. session.add(instance)
  24. session.commit()
  25. return instance, True