电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

基于sqlalchemy對mysql實現增刪改查操作

瀏覽:140日期:2023-10-14 14:12:03

需求場景:

老大讓我利用爬蟲爬取的數據寫到或更新到mysql數據庫中,百度了兩種方法

1 是使用pymysql連接mysql,通過操作原生的sql語句進行增刪改查數據;

2 是使用sqlalchemy連接mysql,通過ORM模型建表并操作數據庫,不需要寫原生的sql語句,相對簡單些;

以下就是本次使用sqlalchemy的經驗之談。

實現流程:連接數據庫》通過模型類創建表》建立會話》執行創建表語句》通過會話進行增刪改查

from sqlalchemy import exists, Column, Integer, String, ForeignKey, existsfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmaker# 創建的數據庫引擎engine = create_engine('mysql+pymysql://user:pwd@ip/數據庫名?charset=utf8')#創建session類型DBSession = sessionmaker(bind=engine)# 實例化官宣模型 - Base 就是 ORM 模型Base = declarative_base()# 創建服務單表class ServiceOrder(Base): __tablename__ = ’serviceOrderTable’ id = Column(Integer, primary_key=True, autoincrement=True) serviceOrderId = Column(String(32), nullable=False, index=True, comment=’服務單ID’) serviceDesc = Column(String(268), comment=’服務說明’) oneLevelName = Column(String(32), comment=’C類別’) twoLevelName = Column(String(32), comment=’T子類’) threeLevelName = Column(String(32), comment=’I項目’) fourLevelName = Column(String(32), comment=’S子項’) transferTimes = Column(String(32), comment=’轉派次數’) overDueStatus = Column(String(32), comment=’過期狀態’) serviceTimeLimit = Column(String(32), comment=’服務時限’) serTimeLimitTypeName = Column(String(16), comment=’時限類型’) # 一對多: # serviceWorkOrder = relationship('ServiceWorkOrder', backref='serviceorder')# 多對一:多個服務工單可以屬于服務單class ServiceWorkOrder(Base): __tablename__ = ’serviceWorkOrderTable’ id = Column(Integer, primary_key=True, autoincrement=True) serviceWorkOrderId = Column(String(32), nullable=False, index=True, comment=’服務工單ID’) workOrderName = Column(String(268), comment=’工單名稱’) fromId = Column(String(32), comment=’服務單ID’) createUserSectionName = Column(String(32), comment=’創建人室’) createUserName = Column(String(32), comment=’創建人’) handlerName = Column(String(32), comment=’處理人’) statusName = Column(String(32), comment=’工單狀態’) createTime = Column(String(32), comment=’創建時間’) # “多”的一方的book表是通過外鍵關聯到user表的: # serviceOrder_id = Column(Integer, ForeignKey(’serviceOrderTable.id’))# 創建數據庫 如果數據庫已存在 則不會創建 會根據庫名直接連接已有的庫def init_db(): Base.metadata.create_all(engine)def drop_db(): Base.metadata.drop_all(engine)def insert_update(): # all_needed_data_lists 是需要插入數據庫的數據 格式[{key: value, ... }, { }, { }...] for item in all_needed_data_lists: ServiceOrderRow = ServiceOrder(serviceOrderId=item[’serviceOrderId’], serviceDesc=item[’serviceDesc’], oneLevelName=item[’oneLevelName’], twoLevelName=item[’twoLevelName’], threeLevelName=item[’threeLevelName’], fourLevelName=item[’fourLevelName’], transferTimes=item[’transferTimes’], overDueStatus=item[’overDueStatus’], serviceTimeLimit=item[’serviceTimeLimit’], serTimeLimitTypeName=item[’serTimeLimitTypeName’], ) try: # 利用exists判斷目標對象是否存在,返回True或Faults it_exists = session.query( exists().where(ServiceOrder.serviceOrderId == item[’serviceOrderId’] )).scalar() except Exception as e: self.log.error(e) break try: # 如果不存在,進行新增;存在的話就更新現存的數據 if not it_exists:session.add(ServiceOrderRow) else:session.query(ServiceOrder).filter(ServiceOrder.serviceOrderId == item[’serviceOrderId’]) .update(item) except Exception as e: self.log.error(e) break try: session.commit() self.log.info(’數據更新成功!’) except: session.rollback() self.log.info(’數據更新失敗!’)if __name__ == '__main__': # 創建數據庫 如果數據庫已存在 則不會創建 會根據庫名直接連接已有的庫 init_db() # 創建session對象,進行增刪改查: session = DBSession() # 利用session 增 改數據 記得提交 insert_update()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 管理会计网-PCMA初级管理会计,中级管理会计考试网站 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 贵州自考_贵州自学考试网| 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 四探针电阻率测试仪-振实密度仪-粉末流动性测定仪-宁波瑞柯微智能 | 钢格栅板_钢格板网_格栅板-做专业的热镀锌钢格栅板厂家-安平县迎瑞丝网制造有限公司 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | 南京雕塑制作厂家-不锈钢雕塑制作-玻璃钢雕塑制作-先登雕塑厂 | 薄壁轴承-等截面薄壁轴承生产厂家-洛阳薄壁精密轴承有限公司 | 二次元影像仪|二次元测量仪|拉力机|全自动影像测量仪厂家_苏州牧象仪器 | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 科威信洗净科技,碳氢清洗机,超声波清洗机,真空碳氢清洗机 | 广西正涛环保工程有限公司【官网】 | 小型玉石雕刻机_家用玉雕机_小型万能雕刻机_凡刻雕刻机官网 | 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 高柔性拖链电缆_卷筒电缆_耐磨耐折聚氨酯电缆-玖泰特种电缆 | 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 首页|成都尚玖保洁_家政保洁_开荒保洁_成都保洁 | 高压直流电源_特种变压器_变压器铁芯-希恩变压器定制厂家 | 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | 北京软件开发_软件开发公司_北京软件公司-北京宜天信达软件开发公司 | 欧必特空气能-商用空气能热水工程,空气能热水器,超低温空气源热泵生产厂家-湖南欧必特空气能公司 | 碳钢法兰厂家,非标法兰,定制异型,法兰生产厂家-河北九瑞管道 | 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 脉冲布袋除尘器_除尘布袋-泊头市净化除尘设备生产厂家 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 安徽控制器-合肥船用空调控制器-合肥家电控制器-合肥迅驰电子厂 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 衡阳耐适防护科技有限公司——威仕盾焊接防护用品官网/焊工手套/焊接防护服/皮革防护手套 | 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 捆扎机_气动捆扎机_钢带捆扎机-沈阳海鹞气动钢带捆扎机公司 | 睿婕轻钢别墅_钢结构别墅_厂家设计施工报价 | 环比机械| 恒温恒湿试验箱_高低温试验箱_恒温恒湿箱-东莞市高天试验设备有限公司 |