如何将 pandas 日期列写入 Databricks SQL 数据库

How to write pandas date column to Databricks SQL database

我有 pandas 数据框列,其字符串值格式为 YYYY-MM-DD HH:MM:SS:mmmmmmm,例如 2021-12-26 21:10:18.6766667。我已经验证所有值都采用这种格式,其中毫秒为 7 位数字。但是以下代码在尝试将数据插入 Azure Databricks SQL 数据库时抛出转换错误(如下所示):

Conversion failed when converting date and/or time from character string

问题:错误的可能原因是什么,我们该如何解决?

备注:转换后的初始值(例如2021-12-26 21:10:18.6766667)甚至在末尾再加两位数,使之成为2021-12-26 21:10:18.676666700 - 9数字毫秒。

import sqlalchemy as sq
import pandas as pd
import datetime

data_df = pd.read_csv('/dbfs/FileStore/tables/myDataFile.csv', low_memory=False, quotechar='"', header='infer')

data_df['OrderDate'] = data_df['OrderDate'].astype('datetime64[ns]')

data_df.to_sql(name='CustomerOrderTable', con=engine, if_exists='append', index=False, dtype={'OrderID' : sq.VARCHAR(10), 
   'Name' : sq.VARCHAR(50),
   'OrderDate' : sq.DATETIME()})

将日期保留为纯字符串 无需 转换 to_datetime.

这是因为DataBricks SQL is based on SQLite, and SQLite expects date strings:

In the case of SQLite, date and time types are stored as strings which are then converted back to datetime objects when rows are returned.


如果原始日期字符串仍然不起作用,请将它们转换 to_datetime 并使用 dt.strftime:

重新格式化为安全格式
df['OrderDate'] = pd.to_datetime(df['OrderDate']).dt.strftime('%Y-%m-%d %H:%M:%S.%f').str[:-3]

或者如果列已经是datetime,直接使用dt.strftime

df['OrderDate'] = df['OrderDate'].dt.strftime('%Y-%m-%d %H:%M:%S.%f').str[:-3]