25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

134 satır
4.1KB

  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.'%s'" % (cls.__table_name__,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. if cls.__priamry_key__ is not None and cls.__priamry_key__ in kwargs:
  66. query = "INSERT INTO %s (%s, %s) VALUES (?, %s)" % (
  67. cls.__table_name__,
  68. cls.__priamry_key__,
  69. ', '.join("'%s'" % str(x) for x in cls.__fields__),
  70. ', '.join(['?'] * len(cls.__fields__)))
  71. data = ()
  72. data = data + (kwargs.get(cls.__priamry_key__),)
  73. for f in cls.__fields__:
  74. if f in cls.__json_fields__:
  75. data = data + (json.dumps(kwargs.get(f)),)
  76. else:
  77. data = data + (kwargs.get(f),)
  78. else:
  79. query = 'INSERT INTO %s (%s) VALUES (%s)' % (
  80. cls.__table_name__,
  81. ', '.join("'%s'" % str(x) for x in cls.__fields__),
  82. ', '.join(['?'] * len(cls.__fields__)))
  83. data = ()
  84. for f in cls.__fields__:
  85. if f in cls.__json_fields__:
  86. data = data + (json.dumps(kwargs.get(f)),)
  87. else:
  88. data = data + (kwargs.get(f),)
  89. cur.execute(query, data)
  90. get_db().commit()
  91. i = cur.lastrowid
  92. kwargs["id"] = i
  93. return cls(kwargs)
  94. @classmethod
  95. def update(cls, **kwargs):
  96. cur = get_db().cursor()
  97. query = 'UPDATE %s SET %s WHERE %s = ?' % (
  98. cls.__table_name__,
  99. ', '.join("'%s' = ?" % str(x) for x in cls.__fields__),cls.__priamry_key__)
  100. data = ()
  101. for f in cls.__fields__:
  102. if f in cls.__json_fields__:
  103. data = data + (json.dumps(kwargs.get(f)),)
  104. else:
  105. data = data + (kwargs.get(f),)
  106. data = data + (kwargs.get(cls.__priamry_key__),)
  107. cur.execute(query, data)
  108. get_db().commit()
  109. return cls(kwargs)