|
@@ -10,10 +10,10 @@ from configparser import ConfigParser
|
|
|
from logging.handlers import TimedRotatingFileHandler
|
|
|
from os.path import dirname
|
|
|
|
|
|
-import redis as redis
|
|
|
+# import redis as redis
|
|
|
import uvloop
|
|
|
from requests import adapters
|
|
|
-from sqlalchemy import create_engine
|
|
|
+from sqlalchemy import create_engine, and_
|
|
|
from sqlalchemy.orm import sessionmaker
|
|
|
|
|
|
adapters.DEFAULT_POOLSIZE = 100000
|
|
@@ -69,35 +69,114 @@ class Logger(object):
|
|
|
logger = Logger.logger
|
|
|
|
|
|
|
|
|
-class MySqlEngine(CfgBaseInit):
|
|
|
+class SqlEngine(CfgBaseInit):
|
|
|
""" mysql 引擎
|
|
|
"""
|
|
|
import pymysql
|
|
|
- from urllib.parse import quote_plus as urlquote
|
|
|
- pymysql.install_as_MySQLdb()
|
|
|
+ from urllib.parse import quote_plus
|
|
|
|
|
|
+ pymysql.install_as_MySQLdb()
|
|
|
mysql_dict = CfgBaseInit.config_dict["MYSQL"]
|
|
|
|
|
|
- __user = mysql_dict['user']
|
|
|
- __password = mysql_dict['password']
|
|
|
- __host = mysql_dict['host']
|
|
|
- __port = mysql_dict['port']
|
|
|
- __db = mysql_dict['db']
|
|
|
- __engine = create_engine(f"mysql://{__user}:{urlquote(__password)}@{__host}:{__port}/{__db}",
|
|
|
- pool_size=2,
|
|
|
- max_overflow=0,
|
|
|
- pool_recycle=280) # 280秒重新连接一次
|
|
|
- DBSession = sessionmaker(bind=__engine)
|
|
|
+ # 280秒重新连接一次
|
|
|
+ DBSession = sessionmaker(bind=create_engine(
|
|
|
+ f"mysql://{mysql_dict['user']}:{quote_plus(mysql_dict['password'])}@{mysql_dict['host']}:{mysql_dict['port']}/{mysql_dict['db']}",
|
|
|
+ pool_size=2, max_overflow=0, pool_recycle=280))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def add(cls, item):
|
|
|
+ with cls.DBSession() as se:
|
|
|
+ se.add(item)
|
|
|
+ se.commit()
|
|
|
+ return item.id
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def add_all(cls, items):
|
|
|
+ with cls.DBSession() as se:
|
|
|
+ se.bulk_save_objects(items)
|
|
|
+ se.commit()
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def query_all(cls, model, filters=None, order_bys=None, offset=None, limit=None):
|
|
|
+ """
|
|
|
+ :param limit:
|
|
|
+ :param offset:
|
|
|
+ :param order_bys:
|
|
|
+ order_by(User.name.desc()
|
|
|
+ :param model:
|
|
|
+ :param filters:
|
|
|
+ User.name=='James'
|
|
|
+ User.name.like('%e%')
|
|
|
+ User.name.in_(['Kobe', 'James'])
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ with cls.DBSession() as se:
|
|
|
+ query = cls.get_query(filters, se, model, order_bys, offset, limit)
|
|
|
+ return query.all()
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def query_page(cls, model, filters, order_bys=None, offset=0, limit=10):
|
|
|
+ count = cls.query_count(model, filters)
|
|
|
+ res_list = cls.query_all(model, filters, order_bys, offset, limit)
|
|
|
+ return {
|
|
|
+ "count": count,
|
|
|
+ "list": res_list
|
|
|
+ }
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def query_count(cls, model, filters=None):
|
|
|
+ with cls.DBSession() as se:
|
|
|
+ query = cls.get_query(filters, se, model)
|
|
|
+ return query.count()
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def query_first(cls, model, filters=None):
|
|
|
+ with cls.DBSession() as se:
|
|
|
+ query = cls.get_query(filters, se, model)
|
|
|
+ return query.first()
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def update(cls, model, filters, dict_new):
|
|
|
+ with cls.DBSession() as se:
|
|
|
+ query = cls.get_query(filters, se, model)
|
|
|
+ res = query.update(dict_new)
|
|
|
+ se.commit()
|
|
|
+ return res
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def get_query(filters, se, model, order_bys=None, offset=None, limit=None):
|
|
|
+ if filters is None:
|
|
|
+ filters = []
|
|
|
+ if order_bys is None:
|
|
|
+ order_bys = []
|
|
|
+ query = se.query(model)
|
|
|
+ for _filter in filters:
|
|
|
+ query = query.filter(_filter)
|
|
|
+ if len(order_bys) > 0:
|
|
|
+ query = query.order_by(*order_bys)
|
|
|
+ if offset:
|
|
|
+ query = query.offset(offset)
|
|
|
+ if limit:
|
|
|
+ query = query.limit(limit)
|
|
|
+ return query
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def delete(cls, model, filters):
|
|
|
+ with cls.DBSession() as se:
|
|
|
+ query = cls.get_query(filters, se, model)
|
|
|
+ res = query.delete()
|
|
|
+ se.commit()
|
|
|
+ return res
|
|
|
|
|
|
|
|
|
class RedisInit(CfgBaseInit):
|
|
|
"""
|
|
|
Redis 对象初始化
|
|
|
"""
|
|
|
- __redis_dict = CfgBaseInit.config_dict["REDIS"]
|
|
|
- __host = __redis_dict['host']
|
|
|
- __port = __redis_dict['port']
|
|
|
- __db = __redis_dict['db']
|
|
|
- pool = redis.ConnectionPool(host=__host, port=__port, db=__db, max_connections=None, decode_responses=True,
|
|
|
- socket_keepalive=False)
|
|
|
- redis = redis.Redis(connection_pool=pool)
|
|
|
+ # __redis_dict = CfgBaseInit.config_dict["REDIS"]
|
|
|
+ # __host = __redis_dict['host']
|
|
|
+ # __port = __redis_dict['port']
|
|
|
+ # __db = __redis_dict['db']
|
|
|
+ # pool = redis.ConnectionPool(host=__host, port=__port, db=__db, max_connections=None, decode_responses=True,
|
|
|
+ # socket_keepalive=False)
|
|
|
+ # redis = redis.Redis(connection_pool=pool)
|