diff --git a/Utils/CrudUtils.py b/Utils/CrudUtils.py index 694a64a..0bf6e9a 100644 --- a/Utils/CrudUtils.py +++ b/Utils/CrudUtils.py @@ -1,6 +1,6 @@ -from typing import TypeVar, Generic, Any, List, get_args, Union, Optional +from typing import TypeVar, Generic, Any, List, get_args, Union, Optional, Tuple from sqlalchemy.orm import Session - +from datetime import datetime from Utils.CommonUtils import get_sqlalchemy_model_fields from Utils.SqlAlchemyUtils import Base, get_db from pydantic import BaseModel, create_model @@ -149,9 +149,22 @@ class CRUDBase(Generic[DbModelType, ModelType, IdSchemaType, CreateSchemaType, U query = query.filter(getattr(self.db_model, key).like(f'%{value}%')) if type(value) in [int, float, bool]: query = query.filter_by(**{key: value}) + # 日期范围查询 + if type(value) in [list, tuple]: + if value[0] is not None: + query = query.filter(getattr(self.db_model, key) >= datetime.fromtimestamp(value[0])) + if value[1] is not None: + query = query.filter(getattr(self.db_model, key) <= datetime.fromtimestamp(value[1])) + count = query.count() - if params.page is not None and params.page_size is not None: - query = query.offset((params.page - 1) * params.page_size).limit(params.page_size).all() + page=None + page_size=None + if 'page' in params_dict: + page=params_dict['page'] + if 'page_size' in params_dict: + page_size = params_dict['page_size'] + if page is not None and page_size is not None: + query = query.offset((page - 1) * page_size).limit(page_size).all() return count, query def get(self, db: Session, item_id: IdSchemaType) -> ModelType: @@ -180,9 +193,17 @@ def create_crud_model(db_model: Base, name, auto_create_keys=['id'], index_key=' **{key: item if key == index_key else ( eval(f'Optional[{item[0].__name__}]', globals()), item[1]) for key, item in fields_dict.items() if key not in auto_create_keys}) + query_fields_dic = {} + for key, item in fields_dict.items(): + print(item[0].__name__) + if item[0].__name__ == 'datetime': + query_fields_dic[key] = ( + eval(f'Optional[List[Optional[int]]]', globals(), locals()), None) + else: + query_fields_dic[key] = (eval(f'Optional[{item[0].__name__}]', globals()), None) + print(query_fields_dic) model_query = create_model(f"{name}Query", __config__=config, - **{key: (eval(f'Optional[{item[0].__name__}]', globals()), item[1]) for key, item in - fields_dict.items()}) + **query_fields_dic) return [model, model_id, model_create, model_update, model_query] diff --git a/Utils/EncyptUtil.py b/Utils/EncyptUtil.py index 2bcbb36..3dc8967 100644 --- a/Utils/EncyptUtil.py +++ b/Utils/EncyptUtil.py @@ -1,7 +1,5 @@ from hashlib import md5 -from jose import jwt - def get_str_md(string: str): md = md5() diff --git a/crud.py b/crud.py index 5fbb79d..2899b35 100644 --- a/crud.py +++ b/crud.py @@ -1,5 +1,5 @@ -from sqlalchemy import Column, String, Float, Integer -from Utils.CrudUtils import auto_create_crud +from sqlalchemy import Column, String, Float, Integer, DateTime, func +from Utils.CrudUtils import auto_create_crud from Utils.SqlAlchemyUtils import Base @@ -10,6 +10,8 @@ class ItemModel(Base): mass = Column(Float) color = Column(String(32)) type = Column(String(32)) + create_time = Column(DateTime, server_default=func.now(), comment='创建时间') + update_time = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment='修改时间') def to_dict(self): return {c.name: getattr(self, c.name) for c in self.__table__.columns} diff --git a/main.py b/main.py index 4525a48..21148ce 100644 --- a/main.py +++ b/main.py @@ -5,10 +5,13 @@ from Router import UserRouter, UserRegisterRouter, DepartmentRouter, PostRouter, AppManageRouter, AuthRuleRouter from Utils.ConfigUtils import init_common_config from Utils.RedisUtils import init_redis_pool -from Utils.SqlAlchemyUtils import init_database +from Utils.SqlAlchemyUtils import init_database from Utils.TestUtils import init_test_env from fastapi.staticfiles import StaticFiles +from crud import item_crud + +item_crud.mount(AppRouter.router) init_common_config() init_database() init_redis_pool()