主页 > 知识库 > 基于sqlalchemy对mysql实现增删改查操作

基于sqlalchemy对mysql实现增删改查操作

热门标签:网站排名优化 地方门户网站 服务外包 呼叫中心市场需求 百度竞价排名 铁路电话系统 Linux服务器 AI电销

需求场景:

老大让我利用爬虫爬取的数据写到或更新到mysql数据库中,百度了两种方法

1 是使用pymysql连接mysql,通过操作原生的sql语句进行增删改查数据;

2 是使用sqlalchemy连接mysql,通过ORM模型建表并操作数据库,不需要写原生的sql语句,相对简单些;

以下就是本次使用sqlalchemy的经验之谈。

实现流程:连接数据库》通过模型类创建表》建立会话》执行创建表语句》通过会话进行增删改查

from sqlalchemy import exists, Column, Integer, String, ForeignKey, exists
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from 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()  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
  • 基于SQLAlchemy实现操作MySQL并执行原生sql语句
  • python数据库操作mysql:pymysql、sqlalchemy常见用法详解
  • python orm 框架中sqlalchemy用法实例详解
  • python使用SQLAlchemy操作MySQL
  • Python SQLAlchemy入门教程(基本用法)
  • python SQLAlchemy的Mapping与Declarative详解
  • python SQLAlchemy 中的Engine详解
  • Python流行ORM框架sqlalchemy安装与使用教程
  • python 获取sqlite3数据库的表名和表字段名的实例
  • Python_查看sqlite3表结构,查询语句的示例代码
  • python使用sqlite3时游标使用方法
  • Python SQLite3简介
  • Python使用flask框架操作sqlite3的两种方式
  • python与sqlite3实现解密chrome cookie实例代码
  • Python SQLite3数据库日期与时间常见函数用法分析
  • Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
  • Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
  • Python sqlite3事务处理方法实例分析
  • Python简单操作sqlite3的方法示例
  • Python3+SQLAlchemy+Sqlite3实现ORM教程

标签:湖南 湘潭 崇左 黄山 兰州 仙桃 铜川 衡水

巨人网络通讯声明:本文标题《基于sqlalchemy对mysql实现增删改查操作》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266