首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将pg8000插入数据帧中

将pg8000插入数据帧中
EN

Stack Overflow用户
提问于 2022-08-25 09:58:28
回答 1查看 63关注 0票数 0

我试图在postgres数据库中插入几行dataframe,并在此dataframe中插入生成的主键。我要这么做:

代码语言:javascript
复制
def createConnexionRds():
    host = "..."
    database = "..."
    conn = pg8000.connect(
        user="...",
        host=host,
        database=database,
        password="...",
        ssl_context=True)
    return conn

def insertProcess(r):
    conn = createConnexionRds()
    insertResults = conn.run(r["tmp_query"])
    insertResult = "NOT_INSERTED"
    if len(insertResults) > 0:
        insertResult = insertResults[0][0]
    conn.commit()
    conn.close()
    return insertResult

def insertPerQuery(myDataframe):
    query = sf.lit("insert into tabAAA (colBBB) values ('valueCCC') returning idAAA")
    
    myDataframe = myDataframe.withColumn("tmp_query", query)
    myDataframe = myDataframe.drop("idAAA")
    
    rdd=myDataframe.rdd.map(
        lambda x:(*x, insertProcess(x))
    )
    
    myDataframe = myDataframe.withColumn("idAAA", sf.lit(""))
    myDataframe = sqlContext.createDataFrame(rdd,myDataframe.schema)
    myDataframe = myDataframe.drop("tmp_query")
    return myDataframe
    
df = insertPerQuery(df)
# df.show(100, False)

问题是当我评论df.show(.)(最后一行),插入不是进程。如果启动第二个df.show(),则插入是重复的。

这是给AWS胶水用的。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-25 10:08:01

这是由于懒惰-评价-天性的火花。只有在调用操作时,代码才会在执行程序上执行,在本例中是.show()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73485564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档