使用python中的发现更新mysql数据库

2024-09-29 23:18:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python不熟悉,所以这可能也有错误的语法。我想批量更新我的sql数据库。我已经在数据库中创建了一个空值列。我的目标是在python上找到移动平均值,然后使用这些值来更新数据库。但问题是,我发现的移动平均值是数据表格式,其中列是时间块,行是日期。但是在数据库中,日期和时间块是不同的列。在

MA30 = pd.rolling_mean(df, 30)

cur.execute(""" UPDATE feeder_ndmc_copy 
            SET time_block = CASE date, (MA30)""")

db.commit()

这就是我得到的错误。在

^{pr2}$

我已经看到了很多其他问题的答案,但是没有一个例子说明如何使用python的finding命令来更新数据库。有什么建议吗?在


Tags: 数据库目标sql格式错误时间语法批量
1条回答
网友
1楼 · 发布于 2024-09-29 23:18:48

好吧,你的问题包含的信息很少,很难给你一个完整的答案,但我会尽力解释我将如何处理这个问题。在

最简单的方法可能是为要更新的每一行自动编写一个单独的UPDATE查询。如果我没弄错的话,这在数据库方面是相对有效的,但是它会在python程序中产生一些开销。我不是一个数据库专家,但是由于你在问题中没有提到性能优化,所以我认为目前任何可行的解决方案都可以。在

我将使用sqlalchemy来处理与数据库的交互。注意,如果您想复制我的代码,您将需要安装sqlalchemy并在代码中导入模块。在

首先,我们需要创建一个sqlalchemy引擎。我将假设您使用本地数据库,如果不是,您将需要编辑此部分。在

engine = sqlalchemy.create_engine('mysql://localhost/yourdatabase')

现在让我们创建一个包含所有查询的字符串(我不知道要更新的列的名称,所以我将使用占位符,我也不知道时间索引的格式,所以我只能猜测):

^{pr2}$

你需要对这一部分进行重大调整以符合你的要求。如果没有您提供数据库的正确模式,我无法做得更好。在

查询列表完成后,我们继续将数据放入SQL:

with engine.connect() as connection:
    with engine.begin():
        connection.execute(queries)

编辑:

显然,我的解决方案不会以任何方式处理诸如pandas操作是否为mysql中不存在的时间戳创建数据点等问题,您需要记住这一点。如果这是一个问题,您将需要使用表单的查询

INSERT INTO table (id,Col1,Col2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12)
ON DUPLICATE KEY UPDATE Col1=VALUES(Col1),Col2=VALUES(Col2);

相关问题 更多 >

    热门问题