在实际项目中,单表操作最简单的方式是通过实体类来进行增删改查,本文介绍通过sqlalchemy创建实体类操作达梦数据库。from sqlalchemy import Column, Integer, Stringfrom sqlalchemy.ext.declarative import declarative_base# 创建对象的基类:Base = declarative_base()class City(Base): # 表的名字: __tablename__ = 'CITY' __table_args__ = { 'schema': 'DMHR', # 指定目标模式名称 # 可选:指定表的其他参数 } # 表的结构: CITY_ID = Column(String(100), primary_key=True) CITY_NAME = Column(String(100)) REGION_ID = Column(Integer)
需要注意的是模式名称是在__table_args__中指定。然后在DatabaseService类中封装Session:def get_db_session(self) -> Any: return self.sessionmaker()
其中:self.sessionmaker()在“Python之连接达梦数据库”文章中初始化的时候进行了定义。接下来就是进行增删改查了,在实际需要操作数据库的位置进行调用:session = get_default_db_service().get_db_session()# 分页查询list1 = session.query(City).offset(0).limit(2).all()# 新增city = City()city.CITY_ID = 'YN'city.CITY_NAME = '云南'city.REGION_ID = 5session.add(city)session.commit()# 修改city_yn = session.query(City).filter(City.CITY_NAME == '云南').one()city_yn.CITY_NAME = '中国云南'session.commit()# 删除session.query(City).filter(City.CITY_NAME == '云南').delete()session.commit()session.close()
每次调用完成session之后,记得关闭:session.close()。同时为避免操作数据库过程中出现异常,建议使用异常处理:try: # 数据库操作except SQLAlchemyError as e: # 这里记录异常信息,比如将错误信息记录到日志文件或数据库中。 session.rollback() raisefinally: session.close()
思考:如何自动生成数据库表对应的实体类?如何将实体类作为参数动态传入到增删改查的函数中进行操作?这些都是可以提高工作效率的方法,后面笔者会继续更新。