2017-07-19 86 views
-1

我正在做pyodbc的python腳本,所以現在我遇到了這個麻煩,腳本從一個表中獲取了一些數據,其中一個數據是smaillint類型,它的支持是一時間,這個腳本插入此信息到另一個表,但是當它插入這個領域的錯誤:插入smallint到一段時間pyodbc

喜歡的東西:

選擇日期(SMALLINT):

順便說一句,我只用間隔30min:

0 
30 
130 
200 
230 
1530 
1600 

而當其插入到時間類型表的:

00:00:00 
00:00:30 
00:01:30 
00:02:00 
00:02:30 
00:15:30 
00:16:00 

而且其suppouse是

00:00:00 
    00:30:00 
    01:30:00 
    02:00:00 
    02:30:00 
    15:30:00 
    16:00:00 

這是我的代碼:

 # ------------------------------------ 
     # Creando Registro de Inicio ****hagent**** 
     # ------------------------------------ 

     finicio = datetime.datetime.now() 
     valores = (finicio_script, fichero, finicio, ip, ipDestino[cont], tablas[0]) 
     #print valores #Prueba de valores a insertar 
     #Se comienza con la creacion de registro en BDD local 
     print "Realizando creacion de Log de Registro" 
     cadenaSQL = (
       "INSERT INTO log_scripts_CMS(id_proceso, fichero, fecha_hora_inicio, srv_origen, " 
       "srv_destino, tipo_script) VALUES (?, ?, ?, ?, ?, ?)" 
       ) 
     #print cadenaSQL #Prueba de query 
     registro_cursor.execute(cadenaSQL, valores) 
     #Se empieza con la insercion de datos a las bdd 
     print "Insertando datos a", ipDestino[cont]+ " tabla: " + tablas [0] 

     cadenaSQL = (
     "INSERT IGNORE INTO "+tablas[0]+"(row_date, **starttime_utc**, intrvl, acd, skill, extension, " 
     "logid, loc_id, rsv_level, i_stafftime, ti_stafftime, i_availtime, ti_availtime, i_acdtime, i_acwtime, " 
     "i_acwouttime, i_acwintime, ti_auxtime, i_auxouttime, i_auxintime, i_othertime, acwincalls, acwintime, " 
     "auxincalls, auxintime, acwoutcalls, acwouttime, acwoutoffcalls, acwoutofftime, acwoutadjcalls, " 
     "auxoutcalls, auxouttime, auxoutoffcalls, auxoutofftime, auxoutadjcalls, event1, event2, event3, " 
     "event4, event5, event6, event7, event8, event9, assists, acdcalls, acdtime, acwtime, o_acdcalls, " 
     "o_acdtime, o_acwtime, da_acdcalls, da_anstime, da_abncalls, da_abntime, holdcalls, holdtime, holdabncalls, " 
     "transferred, conference, abncalls, abntime, i_ringtime, i_da_acdtime, i_da_acwtime, da_acdtime, da_acwtime, " 
     "da_othercalls, da_othertime, ringcalls, ringtime, ansringtime, ti_othertime, da_acwincalls, da_acwintime, " 
     "da_acwocalls, da_acwotime, da_acwoadjcalls, da_acwooffcalls, da_acwoofftime, noansredir, incomplete, " 
     "acdauxoutcalls, i_acdaux_outtime, i_acdauxintime, i_acdothertime, phantomabns, i_auxtime, holdacdtime, " 
     "da_release, acd_release, ti_auxtime0, ti_auxtime1, ti_auxtime2, ti_auxtime3, ti_auxtime4, ti_auxtime5, " 
     "ti_auxtime6, ti_auxtime7, ti_auxtime8, ti_auxtime9, acdcalls_r1, acdcalls_r2, i_otherstbytime, i_auxstbytime" 
     ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?" 
     ",?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," 
     "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);" 
     ) 
     #print (cadenaSQL) #Comprobaacion de query 
     #Se insertan datos en bdd local 
     if cuenta_hagent != 0: 
      crsr.executemany(cadenaSQL, hagent) 
      print "Listo!" 
     else: 
      print "No hay datos por insertar" 

編輯:

這是如何得到dat從另一個表將它們保存在另一個數據庫:

# ------------------------------------ 
    # Obtencion de datos de la tabla hagent 
    # ------------------------------------ 

    tablas_informix = ["hagent", "hsplit", "intradaytramo", "loginout"] 
    #Se obtienen los datos. 
    print "Recuperando datos de la tabla ", tablas_informix[0] 
    #Se obtienen datos de la tabla hagent 
    cadenaSQL = (
    "SELECT hagent.row_date AS FECHA, hagent.starttime AS starttime, hagent.intrvl AS intrvl, hagent.acd AS acd, hagent.split AS skill, " 
    "hagent.extension, hagent.logid, hagent.loc_id, hagent.rsv_level, hagent.i_stafftime, hagent.ti_stafftime, hagent.i_availtime, " 
    "hagent.ti_availtime, hagent.i_acdtime, hagent.i_acwtime, hagent.i_acwouttime, hagent.i_acwintime, hagent.ti_auxtime, hagent.i_auxouttime, " 
    "hagent.i_auxintime, hagent.i_othertime, hagent.acwincalls, hagent.acwintime, hagent.auxincalls, hagent.auxintime, hagent.acwoutcalls, " 
    "hagent.acwouttime, hagent.acwoutoffcalls, hagent.acwoutofftime, hagent.acwoutadjcalls, hagent.auxoutcalls, hagent.auxouttime, " 
    "hagent.auxoutoffcalls, hagent.auxoutofftime, hagent.auxoutadjcalls, hagent.event1, hagent.event2, hagent.event3, hagent.event4, " 
    "hagent.event5, hagent.event6, hagent.event7, hagent.event8, hagent.event9, hagent.assists, hagent.acdcalls, hagent.acdtime, " 
    "hagent.acwtime, hagent.o_acdcalls, hagent.o_acdtime, hagent.o_acwtime, hagent.da_acdcalls, hagent.da_anstime, hagent.da_abncalls, " 
    "hagent.da_abntime, hagent.holdcalls, hagent.holdtime, hagent.holdabncalls, hagent.transferred, hagent.conference, hagent.abncalls, " 
    "hagent.abntime, hagent.i_ringtime, hagent.i_da_acdtime, hagent.i_da_acwtime, hagent.da_acdtime, hagent.da_acwtime, hagent.da_othercalls, " 
    "hagent.da_othertime, hagent.ringcalls, hagent.ringtime, hagent.ansringtime, hagent.ti_othertime, hagent.da_acwincalls, hagent.da_acwintime, " 
    "hagent.da_acwocalls, hagent.da_acwotime, hagent.da_acwoadjcalls, hagent.da_acwooffcalls, hagent.da_acwoofftime, hagent.noansredir, " 
    "hagent.incomplete, hagent.acdauxoutcalls, hagent.i_acdaux_outtime, hagent.i_acdauxintime, hagent.i_acdothertime, hagent.phantomabns, " 
    "hagent.i_auxtime, hagent.holdacdtime, hagent.da_release, hagent.acd_release, hagent.ti_auxtime0, hagent.ti_auxtime1, hagent.ti_auxtime2, " 
    "hagent.ti_auxtime3, hagent.ti_auxtime4, hagent.ti_auxtime5, hagent.ti_auxtime6, hagent.ti_auxtime7, hagent.ti_auxtime8, hagent.ti_auxtime9, " 
    "hagent.acdcalls_r1, hagent.acdcalls_r2, hagent.i_otherstbytime, hagent.i_auxstbytime FROM root.hagent " 
    "WHERE(hagent.row_date = '"+fecha_consulta+"') AND hagent.acd = '"+str(acd[0])+"' AND hagent.split IN ("+condicionIn+") AND starttime = "+hora_query+" " 
    "ORDER BY starttime;" 
    ) 
    #Se inicializa cursor. 
    cursor = cnxn.cursor() 
    cursor.execute(cadenaSQL) 
    hagent = [] 
    hagent = cursor.fetchall() 
    print "Listo!" 
    #print cadenaSQL 
    cnxn.commit() 
+0

請[編輯]你的問題,以更好地解釋從SMALLINT映射到TIME。例如,如果'130'對應於'13:00:00',那麼'131'對應的是什麼? –

+0

順便說一句,當我使用pyodbc將'130'整數值插入'TIME'列時,我得到'00:01:30',而不是'00:13:00'。 –

+0

檢查你的工作。您顯示的示例結果不一致。如果'200'產生'00:02:00'並且'230'產生'00:02:30',那麼我會希望'130'產生'00:01:30'(就像我得到的那樣),而不是'00: 13:00'。 –

回答

1

由100簡單地乘以SMALLINT值這個工作對我來說:

x = 130 
crsr.execute("INSERT INTO table1 (timecol) VALUES (?)", x * 100) 
# value inserted is 01:30:00 
+0

但是,對我來說,這也許是很難的部分,因爲腳本通過另一個遊標將所有數據保存在一個列表中,從而爲另一個表提取數據。 – Urkidy

+0

那麼,您可以更改SELECT查詢來檢索'smallint_time * 100 AS modified_smallint_time',而不是隻以原始形式檢索'smallint_time'。 –