Вставьте панд со столбцами с учетом часового пояса в виде строки в SQL Server с помощью SQLAlchemy - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь вставить данные 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)

Что бы я ни делал, я всегда получаю "2019-08-13 11: 12: 05.0000000 "как значение в SQL Server.

Как вы можете видеть, я пытался" убедить "Python использовать" объект "в качестве типа данных при загрузке кадра данных и установке NVARCHAR в качестве типа данныхдля цели. Где-то это все еще переводится в DATETIME2 (7).

Есть ли способ, которым я могу получить эту строку с указанием часового пояса как строку в SQL Server?

1 Ответ

0 голосов
/ 30 сентября 2019

Одним простым решением было бы преобразовать столбец временной метки панд в строку перед вызовом to_sql:

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

# convert pandas Timestamp column to string
df = df.astype({'date': numpy.str})

table_name = "#tmp"
df.to_sql(table_name, engine, if_exists='replace', index=False)

print(engine.execute(f"SELECT * FROM [{table_name}]").fetchall())
# [('2019-08-13 11:12:05+02:00',)]
...