返回Oracle游标结果到JSON Python

qaxu7uf2  于 2023-05-06  发布在  Oracle
关注(0)|答案(2)|浏览(255)

我正在使用Python Oracle连接。但我有一个问题,返回日期与光标结果为json。
下面是游标的json结果,问题是create_dttm的格式。当创建一个dataframe时,它不会改变格式。有什么建议吗

result = cursur.execute("**my query**")
data = list(result)
final = json.dumps(data)
print(final)
[{"create_dttm": {"$date": 1677264505842}, "update_dttm": {"$date": 1677264505842}, "wo_id": "ABC-63953"},{"create_dttm": {"$date": 1677264505843}, "update_dttm": {"$date": 1677264505843}, "wo_id": "ABC-63954"}]

我希望数据是像下面当创建一个数据框

create_dttm   update_dttm   wo_id
2021-5-09     2021-5-09    ABC-63953
2021-5-09     2021-5-09    ABC-63953
2jcobegt

2jcobegt1#

你可以这样做:

import pandas as pd

# Define the list of JSON objects
json_list = [{"create_dttm": {"$date": 1677264505842}, "update_dttm": {"$date": 1677264505842}, "wo_id": "ABC-63953"},
             {"create_dttm": {"$date": 1677264505843}, "update_dttm": {"$date": 1677264505843}, "wo_id": "ABC-63954"}]

dfItem = pd.DataFrame.from_records(json_list)
print(dfItem)

# to get only the timestamp
dfItem['create_dttm'] = dfItem['create_dttm'].map(lambda x: x['$date'])

dfItem['update_dttm'] = dfItem['update_dttm'].map(lambda x: x['$date'])

# converting the milliseconds to date time
dfItem['create_dttm'] = pd.to_datetime(dfItem['create_dttm'], unit='ms')
dfItem['update_dttm'] = pd.to_datetime(dfItem['update_dttm'], unit='ms')

# keeping only the date
dfItem['create_dttm'] =dfItem['create_dttm'].dt.date
dfItem['update_dttm'] =dfItem['update_dttm'].dt.date

print(dfItem)

输出:

还可以看看是否有一种方法可以直接将毫秒转换为日期时间格式,然后只从中提取日期。

qlfbtfca

qlfbtfca2#

我创建了下面的函数来帮助解决我的问题,也使用了以前答案中的一些部分。但这很有效

date_columns = ['create_dttm','update_dttm']
def clean_dateset(df):
    df = pd.DataFrame.from_records(df)
    for i in df.columns:
        if i in date_columns:
            df[i] = df[i].apply(lambda x: pd.to_datetime(x.get('$date'), unit='ms', errors = 'coerce').date())
    return df

my_fina_dataset = clean_dateset(df)

相关问题