使用Python插入到Teradata时的日期无效

2024-05-29 04:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个python片段,它将使用pyodbc将数据帧插入teradata表中。我无法克服的错误是。。。在

File "file.py", line 33, in <module>
cursor.execute("INSERT INTO DB.TABLE (MASDIV,TRXTYPE,STATION,TUNING_EVNT_START_DT,DOW,MOY,TRANSACTIONS)VALUESrow['MASDIV'],'trx_chtr',row['STATION'],row['TUNING_EVNT_START_DT'],row['DOW'],row['MOY'],row['TRANSACTIONS'])
pyodbc.DataError: ('22008', '[22008] [Teradata][ODBC Teradata Driver][TeradataDatabase] Invalid date supplied for Table.TUNING_EVNT_START_DT. (-2666) (SQLExecDirectW)')

来告诉你。。。我有一个Teradata表,我想获取一个dataframe并将其插入其中。那张桌子是做的。在

^{pr2}$

主键和异常标记将自动填充。下面是我正在使用并遇到错误的脚本。它读取csv并创建一个数据帧。csv的前两行(包括标题)看起来像。。。在

MASDIV              | STATION                    | TUNING_EVNT_START_DT | DOW |    MOY    | TRANSACTIONS

Staten Island       | WFUTDT4                    |         9/12/18      | Wed | September | 538

San Fernando Valley | American Heroes Channel HD |        6/28/2018     | Thu | June      | 12382

这是我正在使用的脚本。。。在

 '''
Written by Bobby October 1st, 2018
REFERENCE
https://tomaztsql.wordpkress.com/2018/07/15/using-python-pandas-dataframe-to-read-and-insert-data-to-microsoft-sql-server/
'''

import pandas as pd
import pyodbc
from datetime import datetime

#READ IN CSV TEST DATA
df = pd.read_csv('Data\\test_set.csv')
print('CSV LOADED')

#ADJUST DATE FORMAT
df['TUNING_EVNT_START_DT'] = pd.to_datetime(df.TUNING_EVNT_START_DT)
#df['TUNING_EVNT_START_DT'] = 
df['TUNING_EVNT_START_DT'].dt.strftime('%m/%d/%Y')
df['TUNING_EVNT_START_DT'] = df['TUNING_EVNT_START_DT'].dt.strftime('%Y-%m-%d')
print('DATE FORMAT CHANGED')
print(df)

#PUSH TO DATABASE
conn = pyodbc.connect('dsn=ConnectR')
cursor = conn.cursor()

# Database table has columns...
# PK | TRXYPE | MASDIV | STATION | TUNING_EVNT_START_DT | DOW | MOY | 
TRANSACTIONS | ANOMALY_FLAG
# PK is autoincrementing, TRXTYPE needs to be specified on insert command, 
and ANOMALY_FLAG defaults to 1 for yes

for index, row in df.iterrows():
        cursor.execute("INSERT INTO DLABBUAnalytics_Lab.Anomaly_Detection_SuperSet(MASDIV,TRXTYPE,STATION,TUNING_EVNT_START_DT,DOW,MOY,TRANSACTIONS)VALUES(?,?,?,?,?,?,?)", row['MASDIV'],'trx_chtr',row['STATION'],row['TUNING_EVNT_START_DT'],row['DOW'],row['MOY'],row['TRANSACTIONS'])
    conn.commit()
    print('RECORD ENTERED')

print('DF SUCCESSFULLY WRITTEN TO DB')

#PULL FROM DATABASE
sql_conn = pyodbc.connect('dsn=ConnectR')
query = 'SELECT * FROM DLABBUAnalytics_Lab.Anomaly_Detection_SuperSet;'
df = pd.read_sql(query, sql_conn)
print(df)

所以在这里,我转换了日期格式,并尝试将一行一行地插入到Teradata表中。第一条记录读入数据库中。第二条记录抛出位于顶部的错误。日期是2018年6月28日,我把它改成了2018年6月11日,只是想看看有没有把日期和月份混在一起,但还是有同样的问题。列是否在某个地方脱离,并且它正试图在日期列中插入另一列的值。在

任何想法或帮助都是非常感谢!在


Tags: todfdtconnstartrowtransactionsprint
1条回答
网友
1楼 · 发布于 2024-05-29 04:23:47

所以问题出在表格的格式上。最初,它被构建为使用CSV中的MM/DD/YYYY格式,但将其更改为YYYY-MM-DD格式使脚本运行得非常完美。在

谢谢!在

相关问题 更多 >

    热门问题