|
- import sqlite3
-
- from flask import json, g
-
-
- def get_db():
- db = getattr(g, '_database', None)
- if db is None:
- def dict_factory(cursor, row):
- d = {}
- for idx, col in enumerate(cursor.description):
- d[col[0]] = row[idx]
- return d
- db = g._database = sqlite3.connect('craftbeerpi.db')
- db.row_factory = dict_factory
- return db
-
- class DBModel(object):
-
- __priamry_key__ = "id"
- __as_array__ = False
- __order_by__ = None
- __json_fields__ = []
-
- def __init__(self, args):
-
- self.__setattr__(self.__priamry_key__, args.get(self.__priamry_key__))
- for f in self.__fields__:
- if f in self.__json_fields__:
- if args.get(f) is not None:
-
- if isinstance(args.get(f) , dict) or isinstance(args.get(f) , list) :
- self.__setattr__(f, args.get(f))
- else:
- self.__setattr__(f, json.loads(args.get(f)))
- else:
- self.__setattr__(f, None)
- else:
- self.__setattr__(f, args.get(f))
-
- @classmethod
- def get_all(cls):
- cur = get_db().cursor()
- if cls.__order_by__ is not None:
- cur.execute("SELECT * FROM %s ORDER BY '%s'" % (cls.__table_name__,cls.__order_by__))
- else:
- cur.execute("SELECT * FROM %s" % cls.__table_name__)
-
- if cls.__as_array__ is True:
- result = []
- for r in cur.fetchall():
- result.append( cls(r))
- else:
- result = {}
- for r in cur.fetchall():
- result[r.get(cls.__priamry_key__)] = cls(r)
- return result
-
- @classmethod
- def get_one(cls, id):
- cur = get_db().cursor()
- cur.execute("SELECT * FROM %s WHERE %s = ?" % (cls.__table_name__, cls.__priamry_key__), (id,))
- r = cur.fetchone()
- if r is not None:
- return cls(r)
- else:
- return None
-
- @classmethod
- def delete(cls, id):
- cur = get_db().cursor()
- cur.execute("DELETE FROM %s WHERE %s = ? " % (cls.__table_name__, cls.__priamry_key__), (id,))
- get_db().commit()
-
- @classmethod
- def insert(cls, **kwargs):
- cur = get_db().cursor()
-
-
- if cls.__priamry_key__ is not None and kwargs.has_key(cls.__priamry_key__):
- query = "INSERT INTO %s (%s, %s) VALUES (?, %s)" % (
- cls.__table_name__,
- cls.__priamry_key__,
- ', '.join("'%s'" % str(x) for x in cls.__fields__),
- ', '.join(['?'] * len(cls.__fields__)))
- data = ()
- data = data + (kwargs.get(cls.__priamry_key__),)
- for f in cls.__fields__:
- if f in cls.__json_fields__:
- data = data + (json.dumps(kwargs.get(f)),)
- else:
- data = data + (kwargs.get(f),)
- else:
-
- query = 'INSERT INTO %s (%s) VALUES (%s)' % (
- cls.__table_name__,
- ', '.join("'%s'" % str(x) for x in cls.__fields__),
- ', '.join(['?'] * len(cls.__fields__)))
-
- data = ()
- for f in cls.__fields__:
- if f in cls.__json_fields__:
- data = data + (json.dumps(kwargs.get(f)),)
- else:
- data = data + (kwargs.get(f),)
-
- print query, data
- cur.execute(query, data)
- get_db().commit()
- i = cur.lastrowid
- kwargs["id"] = i
-
- return cls(kwargs)
-
- @classmethod
- def update(cls, **kwargs):
- cur = get_db().cursor()
- query = 'UPDATE %s SET %s WHERE %s = ?' % (
- cls.__table_name__,
- ', '.join("'%s' = ?" % str(x) for x in cls.__fields__),cls.__priamry_key__)
-
- data = ()
- for f in cls.__fields__:
- if f in cls.__json_fields__:
- data = data + (json.dumps(kwargs.get(f)),)
- else:
- data = data + (kwargs.get(f),)
-
- data = data + (kwargs.get(cls.__priamry_key__),)
- cur.execute(query, data)
- get_db().commit()
- return cls(kwargs)
|