Sql server 将数据帧写入MSSQL datetimeoffset列时缺少时区偏移量

Sql server 将数据帧写入MSSQL datetimeoffset列时缺少时区偏移量,sql-server,pandas,sqlalchemy,pyodbc,pymssql,Sql Server,Pandas,Sqlalchemy,Pyodbc,Pymssql,将数据帧写入MSSQL数据库上的表时,时间戳条目的时区偏移量设置为+00:00,尽管数据帧中的时间戳包含CEST偏移量+02:00 我正在创建一个包含三列的简单表,其中一列包含datetime时区感知时间戳。在SQL server上创建表时,所述列数据类型设置为datetimeoffset7 name = ['price']*24 values = np.random.rand(24) starttimes = pd.date_range('2019-09-10 00:00', '2019-09

将数据帧写入MSSQL数据库上的表时,时间戳条目的时区偏移量设置为+00:00,尽管数据帧中的时间戳包含CEST偏移量+02:00

我正在创建一个包含三列的简单表,其中一列包含datetime时区感知时间戳。在SQL server上创建表时,所述列数据类型设置为datetimeoffset7

name = ['price']*24
values = np.random.rand(24)
starttimes = pd.date_range('2019-09-10 00:00', '2019-09-10 23:00', freq='h', tz='CET')

df = pd.DataFrame({'start_time': starttimes, 'values': values, 'item': name})

engine = sqlalchemy.create_engine('mssql+pymssql://scott:tiger@hostname:port/dbname')

df.to_sql(
    name='test_table',
    con=engine,
    index=False,
    if_exists='append',
    dtype={'start_time': DateTime(timezone=True)}
)
将dataframe插入数据库中的表时,偏移量将变为+00:00,而不是+02:00。 例如,原始数据帧有一个条目 2019-09-10 00:00:00+02:00 服务器上的哪个将成为 2019-09-10 00:00:00.0000000+00:00


当我使用pyodbc代替PyMSQL时,问题仍然存在。我为PyMSQL安装了Microsoft ODBC驱动程序17。

我不确定PyMSQL,但使用pyodbc,如果您使用df.astype将数据框列转换为字符串,则可以插入datetimeoffset列:

表名称=测试表 使用发动机。以连接方式开始: conn.exec_驱动程序_sqlfDROP表[{TABLE_name}] conn.exec_driver_sqlfCREATE TABLE[{TABLE_name}]dto datetimeoffset7 dto=datetime.datetime2019,9,10,0,0,tzinfo=datetime.timezonedatetime.timedeltahours=2 df=pd.DataFrame[dto,],columns=['dto'] 将时间戳列转换为字符串 df=df.astype{'dto':numpy.str} df.to_sqltable_名称,引擎,如果_exists='append',index=False 检查结果 使用发动机。以连接方式开始: printconn.executetextfSELECT CASTdto AS VARCHAR50 AS dto_str FROM[{table_name}].fetchall ['2019-09-10 00:00:00.0000000 +02:00',]