gpt4 book ai didi

python - 如果行不存在,使用 Python 将数据更新到 mysql

转载 作者:行者123 更新时间:2023-11-29 19:04:10 26 4
gpt4 key购买 nike

上下文:我在 mysql 数据库中有一个表,其格式如下。每行是一天的股价和成交量数据

Ticker,Date/Time,Open,High,Low,Close,Volume
AAA,7/15/2010,19.581,20.347,18.429,18.698,174100
AAA,7/16/2010,19.002,19.002,17.855,17.855,109200
BBB,7/19/2010,19.002,19.002,17.777,17.777,104900
BBB,7/19/2010,19.002,19.002,17.777,17.777,104900
CCC,7/19/2010,19.002,19.002,17.777,17.777,104900
....100000 rows

该表是通过从多个具有相同列和格式的 *.txt 文件导入数据来创建的。 *.txt 文件名与股票行情栏中的股票名称相同:即:导入 AAA.txt 获取 2 行 AAA 数据。

所有这些 *.txt 文件都是由检索我国股票价格的系统自动生成的。每天,股市收盘后,.txt 文件都会根据新一天的数据新增一行。

问题:每天,我如何将每个txt文件中的新行更新到数据库中,我不想每天加载mysql表中.txt文件中的所有数据,因为它需要很多时候,我只想加载新行。

我应该如何编写代码来完成这个更新任务。

最佳答案

(1) 创建/使用一个空的阶段表,没有主...:

 create table db.temporary_stage (
... same columns as your orginial table , but no constraints or keys or an index ....

)

(2) # 这应该很快

  LOAD DATA INFILE 'data.txt' INTO TABLE db.temporary_stage;

(3) 连接 id,然后使用哈希函数消除所有未更改的行。以下可以做得更好,但总而言之,当您有很多行时,对数据库使用批量加载会快得多,这主要取决于数据库如何在内部移动内容。它可以一次全部进行维护,而不是一次进行一点点维护,效率更高。

   UPDATE mytable SET 
mytable... = temporary_stage...
precomputed_hash = hash(concat( .... ) )
FROM
(
SELECT temporary_stage.* from mytable join
temporary_stage on mytable.id = temporary_state.id
where mytable.pre_computed_hash != hash(concat( .... ) ) )
AS new_data on mytable.id = new_data.id

# clean up

DELETE FROM temporary_stage;

关于python - 如果行不存在,使用 Python 将数据更新到 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43641123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com