根据数据框中的内容从SQL Server删除行

2024-05-21

我在 SQL Server 中有一个名为的库存表dbo.inventory其中包含Year, Month, Material and Stock_quantity。我每天都会收到 csv 文件形式的新库存计数,需要将其加载到dbo.inventory桌子。但是,我确实需要删除数据库中的记录,如果Year and Monthcsv 文件中的数据已存在于数据库中,以避免加载同一个月的多个库存盘点。

在 SQL 中我会这样做:

Delete t1 
FROM dbo.inventory t1
JOIN csv t2 ON t1.Year = t2.Year and t1.Month = t2.Month

我不知道如何在 Python 脚本中执行此操作,因此我避免将 CSV 文件作为暂存表加载到数据仓库中,而只是删除匹配的现有行Year and Month然后加载它们。

我在另一个设置中使用了以下内容:

delete_date = sales.Date.max()
connection = engine.connect()
connection.execute(f"""delete from sales where Date = '{delete_date}'""")
connection.close()

但这在这里不起作用,因为应删除的输入是一个数据框,理论上如果它是对早期加载数据的更正,则它可能包含多个年份和月份。


Pandas 不支持根据特定条件删除 SQL 行。为此,您必须使用 SQLAlchemy:

import sqlalchemy as sa

engine = sa.create_engine('mssql+pyodbc://...')
meta = sa.MetaData()

# Map the Inventory table in your database to a SQLAlchemy object
inventory = sa.Table('Inventory', meta, autoload=True, autoload_with=engine)

# Build the WHERE clause of your DELETE statement from rows in the dataframe.
# Equivalence in SQL:
#   WHERE (Year = <Year from row 1 of df> AND Month = <Month from row 1 of df>)
#      OR (Year = <Year from row 2 of df> AND Month = <Month from row 2 of df>)
#      ...
cond = df.apply(lambda row: sa.and_(inventory.c['Year'] == row['Year'], inventory.c['Month'] == row['Month']), axis=1)
cond = sa.or_(*cond)

# Define and execute the DELETE
delete = inventory.delete().where(cond)
with engine.connect() as conn:
    conn.execute(delete)

# Now you can insert the new data
df.to_sql('Inventory', engine, if_exists='append', index=False)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据数据框中的内容从SQL Server删除行 的相关文章

随机推荐

  • 博客上的随机背景图片

    我正在尝试整理某种代码 以随机化我的博主博客上的背景图像 我的编程技能不足 但我愿意尝试建议 我记得在 WordPress 中实现了类似的功能 通过将 php 代码文件存储在图像文件夹中 然后从 CSS 中调用该 php 文件 就像它是图像
  • 将二进制输出从文件输出重定向到 stdout

    我有一个专有的二进制文件 它顽固地接受两个文件作为参数 第一个作为输入 第二个作为输出 我想 构建第一个参数 不创建临时文件 使二进制写入标准输出而不是输出文件 第二个参数 我解决了第一个问题 lt 但不确定第二个参数 我编写了以下脚本 看
  • jQuery 插件,用于带有自动建议的逗号分隔标签的简单输入框

    我正在寻找具有以下功能的 jQuery 插件 它应该显示一个输入框 其中的标签将如下所示 蜜蜂 珠子 胡须 当用户键入标签时 它应该显示一个自动建议框供用户输入 显示应该简单明了 只是纯文本逗号分隔标签 它应该允许包含空格键的标签 例如 有
  • 使用 ransack 在 Rails ActiveAdmin 中自定义过滤器

    我创建了一个 activeadmin 过滤器 在其下拉菜单中具有以下用于过滤表数据的选项 Choice A Choice B Choice C Choice D 我想添加第五个选项 F 它可以选择 B 或 C 即 B 和 C 的结果 Cho
  • nhibernate:读写字符串列表

    我知道我可以使用 nhibernate 读取写入字符串列表 如下所示 HasMany x gt x Attachments KeyColumn RowId Table PostTable Element PostKey 但这会创建一个额外的
  • 如何使用git-svn切换svn分支?

    复制 如何让 git svn 使用特定的 svn 分支作为远程存储库 https stackoverflow com questions 192736 how do i make git svn use a particular svn b
  • HTML 帮助关键字查找

    我无法弄清楚如何进行关键字查找 HH KEYWORD LOOKUP http msdn microsoft com en us library ms670091 VS 85 aspx 在 HTML 帮助中工作 如果我有一个显示如下的索引 M
  • React-Native:如何定义 JavaScript 类

    我正在使用本机反应 我需要定义一个类 class myClass email string name string constructor setUser fbid string token string boolean 我试图在它自己的文
  • 如何在函数内部定义函子

    有时 我需要一些函子助手来操作列表 我尽量将范围保持在本地 include
  • 存档操作顺序的保证

    我想知道文件 文件系统上的操作顺序是否有任何保证 假设我有一个文件foo dat我更新如下 lseek fd pos a SEEK SET write fd data a size a lt Operation A lseek fd pos
  • Android 支持哪些字体文件类型?

    Android 支持哪些字体文件类型 例如与 Typeface createFromAsset 一起使用 我似乎找不到文档中列出 我可以看到一些教程中提到了 TTF 并且这里有人暗示现在也支持 OTF 但是是否有一个完整的列表显示不同 AP
  • 访问运行配置 VM 参数中 eclipse 类路径变量 M2_REPO 的值

    在 eclipse 的运行配置中 为您提供了一组可以在 VM 参数中使用的默认变量 例如container path and env var 我想要访问的是类路径变量 M2 REPO 但看不到这样做的方法 我需要在 VM 参数中指定 jav
  • 如何将 Django Admin 中的 DateTimeField 格式化为本地时间?

    如何根据本地时间和时区在管理中格式化日期时间字段 我的设置 py TIME ZONE Europe Bratislava LANGUAGE CODE en us USE I18N True USE L10N True USE TZ True
  • 使用 RedirectToAction 时如何设置协议?

    我的目标操作需要 https 我已经有一个过滤器 如果请求通过 http 传入 它会重定向到 https 但我更愿意从一开始就通过 https 发送请求 EDIT Darin 给出了一个答案 现在更新为其他内容 他问为什么我无论如何都通过
  • BASH:将数据从平面文件导入模板

    我有一个平面记录文件 每行有 33 行 我需要将此文件格式化为模板中的规格 模板为 DOS 格式 源文件为 NIX 格式 该模板具有必须遵守的特定缩进和间距 我想到了几个选择 BASH 与经典的 nix 工具 sed awk grep 等
  • 如何在 Bash 中给定超时后终止子进程?

    我有一个 bash 脚本 它启动一个子进程 该进程时不时地崩溃 实际上是挂起 而且没有明显的原因 闭源 所以我对此无能为力 因此 我希望能够在给定的时间内启动此进程 如果在给定的时间内没有成功返回 则将其终止 有没有simple and r
  • dispatch_write() 和dispatch_read() 用法

    我只是在玩一些 GCD 函数来向文件写入和读取数据 其中两个函数是dispatch write and dispatch read 它允许向文件描述符写入和读取数据 而无需设置新的dispatch io t渠道 所以 我有以下代码 impo
  • Mercurial:如何管理公共/共享代码

    我将 Mercurial 用于个人用途 并出于各种原因考虑将它作为 SVN 的替代品用于某些分布式项目 我已经习惯将它用于自包含项目 并且可以看到各种共享选项 但是我还没有找到任何关于管理公共库的指南 以与 subversion 中的外部提
  • LinkedIn 共享网站时不获取元数据

    我在 LinkedIn 上共享正在处理的网站时遇到问题 LinkedIn 不会从该页面获取任何数据 该网站的元数据遵循以下建议他们的文档 https help linkedin com app answers detail a id 466
  • 根据数据框中的内容从SQL Server删除行

    我在 SQL Server 中有一个名为的库存表dbo inventory其中包含Year Month Material and Stock quantity 我每天都会收到 csv 文件形式的新库存计数 需要将其加载到dbo invent