sqlalchemy实现添加或更新(如果已经存在)
测试类
class TableTest(Base): __tablename__ = 'table_test' id = Column(BIGINT(20),primary_key=True,autoincrement='auto') name = Column(String(50,'utf8mb4_unicode_ci'),nullable=False,unique=True) age=Column(INTEGER(11),nullable=False) height=Column(INTEGER(11),nullable=False)
关键代码:
def GetInsertOrUpdateObj(cls,strFilter,**kw): ''' cls: Model 类名 strFilter: filter的参数.eg:"name='name-14'" **kw: 【属性、值】字典,用于构建新实例,或修改存在的记录 ''' #print('strFilter ; ',strFilter) existing = session.query(cls).filter(text(strFilter)).first() if not existing: res=cls() for k,v in kw.items(): if hasattr(res,k): setattr(res,k,v) return res else: res = existing for k,v in kw.items(): if hasattr(res,k): setattr(res,k,v) return res
调用示例:
if __name__=='__main__': session.add(GetInsertOrUpdateObj(TableTest,"name='name-14'",name='name-14',age=88,height=4321)) session.add(GetInsertOrUpdateObj(TableTest,"name='name-114'",age=33114,height=123.14,name='name-114')) session.commit() session.close()
分类:
Python
标签:
sqlalchemy
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
2011-03-04 Create Statistics的作用