Python将正确月份的数据插入数据库

时间:2014-07-23 22:49:30

标签: python sql postgresql datetime oracle11g

所以我们的代码已经工作了一段时间,除了本月。

我们做了一些更改,但我没有参与更改,但我负责修复错误 现在最奇怪的是,在运行此代码的每个其他python进程中,它只在一个进程中断开,但它完全相同的代码只是不同的数据库表。现在我的第一个想法是数据库中的数据必定是错误的,但是代码的工作方式是从中间数据库获取样本并将该月数据写入oracle数据库中的历史表。

问题是由于某种原因它被困在6月。所有进程的功能几乎相同,因此7月份中间数据库中的样本表中的数据不在7月的历史数据库中。但是,请注意所有其他进程的功能相同,因此当他们第一次运行7月时,他们就不会有历史数据。

  cursor.execute("alter session set time_zone='UTC'")
  cursor.execute("""select nvl(to_char(max(datetime),'YYYY-MM-DD HH24:MI:SS'),'0000-00-00 00:00:00'),
                           to_char(trunc(sysdate,'MM') - 1,'YYYY-MM'),
                           to_char(sysdate,'YYYY-MM')
                      from vm_storage_histories""")        
  last_date,last_month,current_month = cursor.fetchone()



  if current_month == last_date[:7]:   # Start the summarization for the current month
     start_date = current_month + '-01 00:00:00'
  else:
     if last_date == '0000-00-00 00:00:00':
        try:
           pg_cursor.execute("select to_char(min(datetime),'YYYY-MM-DD HH24:MI:SS') from storage_samples")
           start_date, = pg_cursor.fetchone()
        except:
           postgres.rollback()
           start_date = '1970-01-01 00:00:00'
     else:
        start_date = last_month + '-01 00:00:00'



  try:        # Purge the old data
     cursor.execute("delete from vm_storage_histories where datetime >= to_timestamp('%s','YYYY-MM-DD HH24:MI:SS')" % start_date)
  except:
     pass     # if there are no rows, that's ok

  stmt = """select distinct to_char(datetime,'YYYY-MM'),
                   datastore_id,
                   vm_id
              from storage_samples
             where datetime >= to_timestamp('%s','YYYY-MM-DD HH24:MI:SS')""" % start_date

  pg_cursor.execute(stmt)

然而,对我来说,这个代码看起来似乎永远不会在下个月插入,因为它已经工作并且它实际上是从工作副本中复制出来的,但它不适用于这个过程有道理。

它唯一可能是数据,但程序被编写为始终运行并插入下个月的数据令人困惑。

0 个答案:

没有答案