如何使用' pandas.to_sql '将' dict '列推入Redshift SUPER类型列?



AWS Redshift允许列中的SUPER数据类型保存类似json的数据。本指南将解释如何通过COPY函数或使用INSERT函数来完成此操作。INSERT函数要求将JSON_PARSE函数应用于语句中的列值。就在这里。我如何能够使用pandas.DataFrame.to_sql函数来实现上述行为?

df.to_sql('table', connection, schema='my_schema', if_exists='append', dtype=type_dict) 

上面的用于执行INSERT语句。我试着用

type_dict = {
'my_json_column' = sqlalchemy.types.JSON,
}

然而,我看到我的红移表有""字符串中的字符。因此,在目标红移表中定义的SUPER列具有字符串值而不是json。我如何利用pandas.DataFrame.to_sql功能来实现JSON_PARSE功能在红移,是不是没有办法写INSERT查询?

对社区的真诚请求:当你回答这个问题时,请友好,如果你不清楚这个问题,请随时评论。我将重访并重申。

您需要使用SqlAlchemy类型和SqlAlchemy- redshift方言。此外,您需要启用psycopg2扩展。

import pandas as pd
import sqlalchemy as sa
import sqlalchemy_redshift as sar
from psycopg2.extensions import register_adapter
from psycopg2.extras import Json
register_adapter(dict, Json)
register_adapter(list, Json)
rs_url = 'redshift+psycopg2://username:password@cluser_url.redshift.amazonaws.com:5439/db_name'
dict_types={
'responseID': sa.types.INTEGER(),
'surveyID': sa.types.INTEGER(),
'surveyName': sa.types.NVARCHAR(length=65535),
'timestamp': sa.types.DateTime(),
'location': sar.dialect.SUPER()
}
df = pd.read_json('my_file.json')
df.to_sql('table_name', con='connection_string', 
chunksize=100, method='multi', if_exists='replace', index=False, schema='schema_name', dtype=dict_types)

相关内容

  • 没有找到相关文章

最新更新