gpt4 book ai didi

Python 读取 CSV 并将值放入 M​​ySQL 数据库

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:48 25 4
gpt4 key购买 nike

我正在尝试从 csv 中获取值并将它们放入数据库中,我正在设法做到这一点而没有遇到很多麻烦。

但我知道需要写回 csv,所以下次我运行脚本时,它只会将 csv 文件中标记下方的值输入到数据库中。

请注意系统上的 CSV 文件每 24 小时自动刷新一次,因此请记住 csv 中可能没有标记。所以如果没有找到标记,基本上将所有值都放入数据库中。

我计划每 30 分钟运行一次此脚本,因此 csv 文件中可能有 48 个标记,或者每次都删除标记并将其向下移动到文件中?

我一直在删除该文件,然后在脚本中重新创建一个文件,以便在每个脚本运行时创建新文件,但这会以某种方式破坏系统,因此这不是一个很好的选择。

希望大家能帮忙..

谢谢

Python 代码:

import csv
import MySQLdb

mydb = MySQLdb.connect(host='localhost',
user='root',
passwd='******',
db='kestrel_keep')

cursor = mydb.cursor()

csv_data = csv.reader(file('data_csv.log'))

for row in csv_data:

cursor.execute('INSERT INTO `heating` VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,)',
row)
#close the connection to the database.
mydb.commit()
cursor.close()
import os


print "Done"

我的 CSV 文件格式:

2013-02-21,21:42:00,-1.0,45.8,27.6,17.3,14.1,22.3,21.1,1,1,2,2
2013-02-21,21:48:00,-1.0,45.8,27.5,17.3,13.9,22.3,20.9,1,1,2,2

最佳答案

看起来您的 MySQL 表中的第一个字段是一个唯一 时间戳。可以设置 MySQL 表,使字段必须是唯一的,并忽略会违反该唯一性属性的 INSERT。在 mysql> 提示符下输入命令:

ALTER IGNORE TABLE heating ADD UNIQUE heatingidx (thedate, thetime)    

(将 thedatethetime 更改为包含日期和时间的列的名称。)


一旦你对你的数据库做了这个改变,你只需要在你的程序中改变一行来让 MySQL 忽略重复的插入:

cursor.execute('INSERT IGNORE INTO `heating` VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,)', row)

是的,在已经处理过的行上运行 INSERT IGNORE ... 有点浪费,但考虑到您的数据频率(每 6 分钟?),它不是将在性能方面非常重要。

这样做的好处是现在不可能不小心将重复项插入到您的表中。它还使您的程序逻辑简单易读。

它还避免了让两个程序同时写入同一个 CSV 文件。即使您的程序通常 成功而没有错误,每隔一段时间——也许是千载难逢的机会——您的程序和其他程序可能会同时尝试写入文件,这可能会导致在错误或损坏的数据中。


您还可以通过使用 cursor.executemany 而不是 cursor.execute 使您的程序运行得更快一些:

rows = list(csv_data)
cursor.executemany('''INSERT IGNORE INTO `heating` VALUES
( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,)''', rows)

相当于

for row in csv_data:    
cursor.execute('INSERT INTO `heating` VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,)',
row)

除了它将所有数据打包到一个命令中。

关于Python 读取 CSV 并将值放入 M​​ySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15064376/

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