storage.py 1.9 KB
Newer Older
H
hjdhnx 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File  : storage.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date  : 2022/9/6

from functools import lru_cache

def init(db):
    class Storage(db.Model):
        __tablename__ = 'storage'
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        key = db.Column(db.String(20),unique=True)
        value = db.Column(db.UnicodeText())
        # value = db.Column(db.Text())

        def __repr__(self):
            return "<Storage(key='%s', value='%s')>" % (
                self.key, self.value)

        @classmethod
        def setItem(self, key, value=None):
            res = db.session.query(self).filter(self.key == key).first()
            if res:
                res.value = value
                db.session.add(res)
            else:
                res = Storage(key=key, value=value)
                db.session.add(res)
                db.session.flush()
            try:
                db.session.commit()
                self.clearCache()
                return res.id
            except Exception as e:
                print(f'发生了错误:{e}')
                return None

        @classmethod
        @lru_cache(maxsize=200)
        def getItem(self, key, value=''):
            res = db.session.query(self).filter(self.key == key).first()
            if res:
                return res.value or value
            else:
                return value

        @classmethod
        def clearItem(self, key):
            self.clearCache()
            res = db.session.query(self).filter(self.key == key).first()
            if res:
                res.delete()
                ret = db.session.commit()
                self.clearCache()
                return ret
            else:
                return True

        @classmethod
        def clearCache(self):
            self.getItem.cache_clear()

    # db.create_all()
    db.create_all()
    return Storage