使用 dict 方法
这种方式的不需要模型配合,便可以直接把查询数据转为字典。不过对 [[sqlalchemy]] 来讲字典中会多一个 _sa_instance_state 需要移除。
def get(self, table, column, value) -> dict: """ 获取单条信息"""
with self.session.begin() as session: table_column = getattr(table, column) stmt = select(table).where(table_column == value) result = session.execute(stmt).scalar()
if not result: return {}
result = result.__dict__ # 转为字典
if "_sa_instance_state" in result: del result["_sa_instance_state"] # 删除指定键
return result
使用 dict 方法
def get(self, table, column, value) -> dict: """ 获取单条信息"""
with self.session.begin() as session: table_column = getattr(table, column) stmt = select(table).where(table_column == value) result = session.execute(stmt).scalar()
if not result: return {}
return dict(result)
使用函数
可以自定义需要返回的数据,甚至是可以
class Infos(Base, GetDict): name = Column(String(32)) age = Column(Integer)
def to_dict(self): return { "name": self.name, "age": self.age, }
模版
class GetDict:
def keys(self): k_list = [] for key in self.__mapper__.c.keys(): k_list.append(key) return k_list
def __getitem__(self, item): return getattr(self, item)
对应模型
class Infos(Base, GetDict): name = Column(String(32)) age = Column(Integer)
调用
infos = Infos()print(dict(infos))
调用时需要使用 dict
。
分表
class Test(): def model(suffix): tablename = f"test{suffix}" classname = f"test{suffix}"
# 这里也可以传递上面的 GetDict Model = type(classname, (Base, ), { '__module__': __name__, '__name__': classname, '__tablename__': tablename,
"id" : Column(String(36), primary_key=True, default=str(uuid.uuid4())), "name": Column(Integer), "create_time" : Column(DateTime, server_default=func.now(), comment="创建时间"), "update_time" : Column(DateTime, server_default=func.now(), onupdate=func.now(), comment='修改时间'), })
return Model
调用
# model 返回的便是类(表模型)model = Test.model("42")db.get_all(model, {})