sqlalchemy 去重 只保留非重复数据

331 篇文章 3 订阅
该代码段主要用于从Stock_rpa_mm373表中删除重复的location数据。首先,它获取SG17代码的唯一location列表,然后过滤并删除不在这个列表中的记录或code不等于SG17的记录。接着,它查找并删除所有location出现次数大于1的记录,以确保没有重复。最后,提交事务以保存更改。
摘要由CSDN通过智能技术生成
~Stock_rpa_mm373.location.in_(location_list),
这个符号代表非
def delete_duplicate_location_mm373():
    # 删除重复的 LH807 location 仓码,因为 LH mb52 仓码的描述信息需要在 mm373 中获取
    location_list = session.query(Stock_rpa_mm373.location).filter(Stock_rpa_mm373.code=='SG17').distinct().all()
    location_list = [x[0] for x in location_list]
    print('code list',len(location_list), location_list)

    # location_list = session.query(Stock_rpa_mb52.sloc).filter(Stock_rpa_mb52.code == 'LH807').distinct().all()
    # print('code list', len(location_list), location_list)
    delete_list = session.query(Stock_rpa_mm373).filter(
        or_(
        ~Stock_rpa_mm373.location.in_(location_list),
            Stock_rpa_mm373.code != 'SG17'

        )).delete(synchronize_session=False)
    print('len delete list', delete_list)
    duplicates = session.query(Stock_rpa_mm373.location, func.count(Stock_rpa_mm373.location)).group_by(Stock_rpa_mm373.location).having(
        func.count(Stock_rpa_mm373.location) > 1).all()
    print(len(duplicates))
    print(duplicates)
    for duplicate in duplicates:
        name = duplicate[0]
        # 根据需要构建删除条件
        duplicate_records = session.query(Stock_rpa_mm373).filter(Stock_rpa_mm373.location == name).all()

        # 删除重复数据
        for record in duplicate_records[1:]:
            session.delete(record)

    #.delete(synchronize_session=False)
    # # 提交事务
    session.commit()
SQLAlchemy是一个强大的Python SQL工具包和ORM(对象关系映射)库,它提供了一种方便的方式来操作关系数据库,即使不直接使用SQL。它允许开发者定义自己的对象模型(通常是基于Python类),然后这些对象模型会自动映射到数据库表中,使得数据的存取更加直观和面向对象。 以下是SQLAlchemy存储数据的主要步骤: 1. 定义数据模型(Entities): 使用`Table`或`declarative_base`创建一个或多个类,它们代表数据库中的表。例如: ```python from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) email = Column(String) ``` 2. 连接到数据库: 使用`create_engine`函数创建数据库引擎,连接到相应的数据库。 ```python from sqlalchemy import create_engine engine = create_engine('sqlite:///example.db') ``` 3. 创建表: 如果数据库中不存在对应的表,可以通过Session对象(`Session`是ORM的核心)自动创建。 ```python from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) session = Session() session.add(User(name='John Doe', email='john.doe@example.com')) session.commit() # 数据保存到数据库 ``` 4. 查询数据: 使用Python语法查询对象实例。 ```python user = session.query(User).filter_by(name='John Doe').first() ``` 5. 更新和删除数据: 对已有对象执行更新或删除操作。 ```python user.email = 'new_email@example.com' session.commit() # 更新数据 session.delete(user) session.commit() -- 删除数据 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值