【发布时间】:2021-10-04 06:16:15
【问题描述】:
我有一个粘合工作,我将数据从 csv 插入到 postgresql 表中。现在我需要更新 postgresql DB 表中的一行。我已经这样做了,但所需的行将作为表中的新条目出现,而不是更新现有的。我怎样才能做到这一点?请帮忙...
【问题讨论】:
标签: python postgresql amazon-web-services aws-glue
我有一个粘合工作,我将数据从 csv 插入到 postgresql 表中。现在我需要更新 postgresql DB 表中的一行。我已经这样做了,但所需的行将作为表中的新条目出现,而不是更新现有的。我怎样才能做到这一点?请帮忙...
【问题讨论】:
标签: python postgresql amazon-web-services aws-glue
Glue 目前不支持覆盖模式。您需要将您的DynamicFrame 转换为DataFrame,然后使用mode = overwrite 编写如下:
dynamic_frame.toDF()
.write
.mode("overwrite")
【讨论】:
Spark 还不支持更新记录。您只能覆盖(删除现有记录并添加新记录)或追加(与现有记录一起添加新记录)。
但是,如果您想更新特定行,您可以使用 python 库 pg8000。
glue 2.0和python 3的步骤如下:
下载并解压 pg8000、asn1crypto 和 scamp tar 文件,然后将它们全部压缩为一个。
将文件上传到 s3 存储桶
在python库路径中,添加压缩后的pg8000文件的路径。 例如:s3://bucketname/foldername/pg8000-1.19.2.zip
仅导入 pg8000.native 并使用以下代码直接连接到数据库。
import ssl
import pg8000.native
conn = pg8000.native.Connection(database="database", host="xxxxxxrds.amazonaws.com", port=xxxx, user="user", password="password",ssl_context=ssl._create_unverified_context())
insert_query = "your update query that you would generally write in postgresql"
conn.run(insert_query)
conn.run("COMMIT")
conn.close()
PS:您还可以使用 python '.format' 使您的查询通用。
【讨论】: