Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

115 rindas
3.4KB

  1. import sqlite3
  2. from flask import json, g
  3. def get_db():
  4. db = getattr(g, '_database', None)
  5. if db is None:
  6. def dict_factory(cursor, row):
  7. d = {}
  8. for idx, col in enumerate(cursor.description):
  9. d[col[0]] = row[idx]
  10. return d
  11. db = g._database = sqlite3.connect('craftbeerpi.db')
  12. db.row_factory = dict_factory
  13. return db
  14. class DBModel(object):
  15. __priamry_key__ = "id"
  16. __as_array__ = False
  17. __order_by__ = None
  18. __json_fields__ = []
  19. def __init__(self, args):
  20. self.__setattr__(self.__priamry_key__, args.get(self.__priamry_key__))
  21. for f in self.__fields__:
  22. if f in self.__json_fields__:
  23. if args.get(f) is not None:
  24. if isinstance(args.get(f) , dict) or isinstance(args.get(f) , list) :
  25. self.__setattr__(f, args.get(f))
  26. else:
  27. self.__setattr__(f, json.loads(args.get(f)))
  28. else:
  29. self.__setattr__(f, None)
  30. else:
  31. self.__setattr__(f, args.get(f))
  32. @classmethod
  33. def get_all(cls):
  34. cur = get_db().cursor()
  35. if cls.__order_by__ is not None:
  36. cur.execute("SELECT * FROM %s ORDER BY '%s'" % (cls.__table_name__,cls.__order_by__))
  37. else:
  38. cur.execute("SELECT * FROM %s" % cls.__table_name__)
  39. if cls.__as_array__ is True:
  40. result = []
  41. for r in cur.fetchall():
  42. result.append( cls(r))
  43. else:
  44. result = {}
  45. for r in cur.fetchall():
  46. result[r.get(cls.__priamry_key__)] = cls(r)
  47. return result
  48. @classmethod
  49. def get_one(cls, id):
  50. cur = get_db().cursor()
  51. cur.execute("SELECT * FROM %s WHERE %s = ?" % (cls.__table_name__, cls.__priamry_key__), (id,))
  52. r = cur.fetchone()
  53. if r is not None:
  54. return cls(r)
  55. else:
  56. return None
  57. @classmethod
  58. def delete(cls, id):
  59. cur = get_db().cursor()
  60. cur.execute("DELETE FROM %s WHERE %s = ? " % (cls.__table_name__, cls.__priamry_key__), (id,))
  61. get_db().commit()
  62. @classmethod
  63. def insert(cls, **kwargs):
  64. cur = get_db().cursor()
  65. query = 'INSERT INTO %s (%s) VALUES (%s)' % (
  66. cls.__table_name__,
  67. ', '.join("'%s'" % str(x) for x in cls.__fields__),
  68. ', '.join(['?'] * len(cls.__fields__)))
  69. data = ()
  70. for f in cls.__fields__:
  71. if f in cls.__json_fields__:
  72. data = data + (json.dumps(kwargs.get(f)),)
  73. else:
  74. data = data + (kwargs.get(f),)
  75. cur.execute(query, data)
  76. get_db().commit()
  77. i = cur.lastrowid
  78. kwargs["id"] = i
  79. return cls(kwargs)
  80. @classmethod
  81. def update(cls, **kwargs):
  82. cur = get_db().cursor()
  83. query = 'UPDATE %s SET %s WHERE %s = ?' % (
  84. cls.__table_name__,
  85. ', '.join("'%s' = ?" % str(x) for x in cls.__fields__),cls.__priamry_key__)
  86. data = ()
  87. for f in cls.__fields__:
  88. if f in cls.__json_fields__:
  89. data = data + (json.dumps(kwargs.get(f)),)
  90. else:
  91. data = data + (kwargs.get(f),)
  92. data = data + (kwargs.get(cls.__priamry_key__),)
  93. cur.execute(query, data)
  94. get_db().commit()
  95. return cls(kwargs)