如何解决将包含日期的多个 CSV 文件批量加载到 Oracle 数据库日期中
我正在尝试将包含 YYYY-MM-DD 日期格式的 CSV 文件加载到 oracle 数据库。但是,总是以“数据库错误:ORA-01861:文字与格式字符串不匹配”结束。
我认为它需要一种 TO-DATE 类型,但不知道以批处理模式实现它。
# Locating CSVs
DATA_FILES_PATH = 'apt-data-files'
data_files = os.listdir(DATA_FILES_PATH)
data_files = [ f'{DATA_FILES_PATH}/{r}' for r in data_files ]
# dataframe to tuple list
testD_tp = [ tuple(r) for r in testD.values ]
# dataframe -> DB insert function
def bulk_insert(tuple_data):
bulk_insert_sql = """
INSERT INTO APT_DEAL_PRICE
VALUES (
SEQ_ID.NEXTVAL,:REGION,:REGION_SUB,:APT_NAME,:APT_SIZE,:APT_FLOOR,:CONTRACT_DATE,:CONTRACT_PRICE,:COMPLETION_YEAR,:STREET_NUM,:STREET_NAME)
"""
conn = cx_Oracle.connect('house','house','localhost:1521/xe')
cursor = conn.cursor()
cursor.prepare(bulk_insert_sql)
cursor.executemany(None,tuple_data)
conn.commit()
cursor.close()
conn.close()
# Batching dataframe to DB
bulk_insert(testD_tp)
DatabaseError: ORA-01861: literal does not match format string
任何帮助将不胜感激。
解决方法
假设 contract_date
是唯一的 date
列,您可能想要
INSERT INTO APT_DEAL_PRICE
VALUES (
SEQ_ID.NEXTVAL,:REGION,:REGION_SUB,:APT_NAME,:APT_SIZE,:APT_FLOOR,to_date(:CONTRACT_DATE,'yyyy-mm-dd'),:CONTRACT_PRICE,:COMPLETION_YEAR,:STREET_NUM,:STREET_NAME)
作为一般做法,我强烈建议列出您要向其中插入数据的列,以使您的代码能够自我记录,并且如果有人稍后向表中添加新列,您的代码不会失败。我在猜测您表的列名,但类似于
INSERT INTO APT_DEAL_PRICE( apt_deal_price_id,region,region_sub,apt_name,apt_size,apt_floor,contract_date,contract_price,completion_year,street_num,street_name )
VALUES (
SEQ_ID.NEXTVAL,:STREET_NAME)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。