【问题标题】:Insert csv data on certain range of date in python and mysql在 python 和 mysql 中的特定日期范围内插入 csv 数据
【发布时间】:2014-10-27 01:34:32
【问题描述】:

我只想将某个日期插入我的表中。我有这个代码。

当我只使用这段代码时,插入了 csv 中的所有数据

for row in readers:
     query4 = """INSERT INTO csv(
                 csv_id, Mchn, EnNO, Mode1,
                 IODMd, Date_Time)
                 VALUES(%s,%s,%s,%s,%s,%r)
                 """

     db.session.execute(query4 % (row[0], row[1], row[2], row[4], row[5], row[6],))
db.session.commit()

但我只想插入某个日期 所以我尝试在其上添加 WHERE。像这样

for row in readers:
    query4 = """INSERT INTO csv(
                csv_id, Mchn, EnNO, Mode1,
                IODMd, Date_Time)
                VALUES(%s,%s,%s,%s,%s,%r)
                WHERE Date_Time >= (select c_start_date from c_temp c where c.id = :id)
                AND Date_Time <= (select DATE_ADD(c_end_date,interval 1 day) from c_temp c where c.id = :id)"""

     db.session.execute(query4 % (row[0], row[1], row[2], row[4], row[5], row[6],))
db.session.commit()

但是当我尝试它时,它有一个错误并停止它。谢谢。

【问题讨论】:

  • python 不是 sql。因此,如果您通过 python 创建插入语句,则必须在 python 中过滤数据。
  • 另外,query4 只执行最后一行,而不是 每个 行。我可能会生成 SQL 插入语句并将创建的字符串放在一个列表中,然后创建一个单独的事务以插入。
  • 嗨,monkut,我的意思是 MYSQL,我编辑标题 :)

标签: python mysql csv


【解决方案1】:

如果您想根据数据的日期时间过滤要插入的数据,您应该在创建 INSERT 语句之前评估数据

import datetime

start_date = datetime.datetime(<value from db>)
db_end_date = datetime.datetime(<value from db>)
end_date = db_end_date + datetime.timedelta(days=1)

for row in readers:
     csvid, mchn, enno, model, iodmd, dt = row[:7]
     # parse incoming datetime value into a python datetime object
     # not sure what your format is here
     parsed_date = datetime.datetime.strptime(dt, "%Y-%m-%D")
     if start_date <= parsed_date <= end_date:
         query4 = """INSERT INTO csv(
                     csv_id, Mchn, EnNO, Mode1,
                     IODMd, Date_Time)
                     VALUES(%s,%s,%s,%s,%s,%r)
                  """

         db.session.execute(query4 % (csvid, mchn, enno, model, iodmd, dt,))
db.session.commit()

【讨论】:

  • 嗨,我试过了,但它给了我一个语法错误。特别是当我分配 start_date = select c_start_date from c_temp c where c.id = :id
  • 是的,你需要弄清楚如何查询数据库并获取值。
猜你喜欢
  • 2020-06-02
  • 2022-07-04
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多