Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用SQLAlchemy将具有时区感知列的熊猫作为字符串插入SQL Server_Python_Sql Server_Pandas_Sqlalchemy_Timezone - Fatal编程技术网

Python 使用SQLAlchemy将具有时区感知列的熊猫作为字符串插入SQL Server

Python 使用SQLAlchemy将具有时区感知列的熊猫作为字符串插入SQL Server,python,sql-server,pandas,sqlalchemy,timezone,Python,Sql Server,Pandas,Sqlalchemy,Timezone,我正在努力将JSON数据插入到包含时区信息的SQL Server中。我知道数据类型DATETIMEOFFSET不起作用。我很乐意将数据放在VARCHAR列中,稍后我可以将其转换为真正的时区感知数据类型 import pandas as pd import json from sqlalchemy import create_engine, NVARCHAR json_data = json.dumps([{ "date" : "2019-08-13T11:12:05+02:00"}]) df

我正在努力将JSON数据插入到包含时区信息的SQL Server中。我知道数据类型DATETIMEOFFSET不起作用。我很乐意将数据放在VARCHAR列中,稍后我可以将其转换为真正的时区感知数据类型

import pandas as pd
import json
from sqlalchemy import create_engine, NVARCHAR

json_data = json.dumps([{ "date" : "2019-08-13T11:12:05+02:00"}])
df = pd.read_json(json_data, dtype='object')

con='mssql+pyodbc://database'
engine = create_engine(con, encoding='utf-8', echo=False)

table_name = "load"
columns = {'date': NVARCHAR()}

print(df.dtypes)
df.to_sql(table_name, con=engine, if_exists='replace', dtype=columns, index=False)
无论我做什么,我总是在SQL Server中获得2019-08-13 11:12:05.0000000作为一个值

如您所见,我试图说服Python在加载数据帧时使用object作为数据类型,并将NVARCHAR设置为目标的数据类型。在某些地方,这仍然被翻译成DATETIME27


有没有一种方法,我可以在SQL Server中将时区感知字符串作为字符串登录?

一个简单的解决方案是在调用SQL之前将pandas Timestamp列转换为字符串:

json_data=json.dumps[{日期:2019-08-13T11:12:05+02:00}] df=pd.read_jsonjson_数据 将时间戳列转换为字符串 df=df.astype{'date':numpy.str} 表_name=tmp df.to_sqltable_名称,引擎,如果_exists='replace',index=False 使用发动机。以连接方式开始: printconn.executefSELECT*FROM[{table_name}].fetchall ['2019-08-13 11:12:05+02:00',]
SqlServer中“加载”表的日期列使用的数据类型是什么?nvarchar。上面的示例自动创建具有该数据类型的表。