【发布时间】:2021-05-12 07:16:09
【问题描述】:
这是我第一次在这里发帖,如果我还没有遵循最佳做法,我很抱歉。
我已经开发了一个代码(比如说“cod1”)来基本上执行以下操作:
- 使用 pandas 从数据库(红移)写入数据
- 使用 DataFrame 进行一些转换
- 将数据附加到数据库中的现有表(红移)
cod1的片段:
engine = create_engine(
'redshift+psycopg2://{0}:{1}@{2}:{3}/{4}'.format(
pg_param['user'], pg_param['password'], pg_param['host'], pg_param['port'], pg_param['database'])
)
df_2[col_list].to_sql(_pg_table_name, con=engine,
if_exists='append', method='multi', schema=_pg_table_schema)
在 cod1 中运行脚本之前,我已经在另一个 python 脚本中创建了 db 表。
当我在开发环境 (postgres) 中运行 code1 时,它工作正常。但是,当我在专业环境(红移)中运行它时,它会抛出以下错误:
psycopg2.errors.DuplicateTable: Relation "uac_c2_py" already exists
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DuplicateTable) Relation "uac_c2_py" already exists
'''
[SQL:
CREATE TABLE eu_fleet_analytics."UAC_C2_py" (
index BIGINT,
lat TEXT,
long TEXT,
"PROD" FLOAT(53),
"CON" FLOAT(53),
"DTT" FLOAT(53),
"RTT" FLOAT(53),
"MTT" FLOAT(53),
"LOTT" FLOAT(53),
"WOTT" FLOAT(53),
"ESTT" FLOAT(53),
"SOTT" FLOAT(53),
"EECTT" FLOAT(53),
"CSTT" FLOAT(53),
"WDCT" FLOAT(53),
"OTT" FLOAT(53),
)
]'''
并显示它正在尝试执行 CREATE TABLE sql 语句,即使它不在我的代码中。
有谁知道我该如何解决它或任何解决方法?
提前谢谢你。
【问题讨论】:
-
在我看来,其他脚本正在运行并尝试
CREATE表,因为if_exists='append'不会对现有表有问题。它也不会尝试CREATE一个新的。 -
@AdrianKlaver,我在前一天运行之前的 python 脚本来创建表。在 pro env 中,我试图在表中追加比在 dev env 中更多的行。会不会是个问题?
-
错误消息告诉你问题,当它已经存在时,正在尝试执行
CREATE TABLE eu_fleet_analytics."UAC_C2_py"。附加行与此无关。您的进程的某些部分在不应该运行CREATE TABLE时运行。你需要找到那是什么。我将从查看 Postgres 日志开始。
标签: python sqlalchemy amazon-redshift psycopg2