增删改查模型bug修改

This commit is contained in:
wcq 2023-02-22 16:54:53 +08:00
parent a8325deab9
commit 98f36223b6
4 changed files with 35 additions and 11 deletions

View File

@ -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 sqlalchemy.orm import Session
from datetime import datetime
from Utils.CommonUtils import get_sqlalchemy_model_fields from Utils.CommonUtils import get_sqlalchemy_model_fields
from Utils.SqlAlchemyUtils import Base, get_db from Utils.SqlAlchemyUtils import Base, get_db
from pydantic import BaseModel, create_model 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}%')) query = query.filter(getattr(self.db_model, key).like(f'%{value}%'))
if type(value) in [int, float, bool]: if type(value) in [int, float, bool]:
query = query.filter_by(**{key: value}) 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() count = query.count()
if params.page is not None and params.page_size is not None: page=None
query = query.offset((params.page - 1) * params.page_size).limit(params.page_size).all() 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 return count, query
def get(self, db: Session, item_id: IdSchemaType) -> ModelType: 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 ( **{key: item if key == index_key else (
eval(f'Optional[{item[0].__name__}]', globals()), item[1]) for key, item in eval(f'Optional[{item[0].__name__}]', globals()), item[1]) for key, item in
fields_dict.items() if key not in auto_create_keys}) 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, model_query = create_model(f"{name}Query", __config__=config,
**{key: (eval(f'Optional[{item[0].__name__}]', globals()), item[1]) for key, item in **query_fields_dic)
fields_dict.items()})
return [model, model_id, model_create, model_update, model_query] return [model, model_id, model_create, model_update, model_query]

View File

@ -1,7 +1,5 @@
from hashlib import md5 from hashlib import md5
from jose import jwt
def get_str_md(string: str): def get_str_md(string: str):
md = md5() md = md5()

View File

@ -1,5 +1,5 @@
from sqlalchemy import Column, String, Float, Integer from sqlalchemy import Column, String, Float, Integer, DateTime, func
from Utils.CrudUtils import auto_create_crud from Utils.CrudUtils import auto_create_crud
from Utils.SqlAlchemyUtils import Base from Utils.SqlAlchemyUtils import Base
@ -10,6 +10,8 @@ class ItemModel(Base):
mass = Column(Float) mass = Column(Float)
color = Column(String(32)) color = Column(String(32))
type = 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): def to_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns} return {c.name: getattr(self, c.name) for c in self.__table__.columns}

View File

@ -5,10 +5,13 @@ from Router import UserRouter, UserRegisterRouter, DepartmentRouter, PostRouter,
AppManageRouter, AuthRuleRouter AppManageRouter, AuthRuleRouter
from Utils.ConfigUtils import init_common_config from Utils.ConfigUtils import init_common_config
from Utils.RedisUtils import init_redis_pool 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 Utils.TestUtils import init_test_env
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from crud import item_crud
item_crud.mount(AppRouter.router)
init_common_config() init_common_config()
init_database() init_database()
init_redis_pool() init_redis_pool()