AWS lambda没有更新rds postgres表,但是执行成功



我有一个postgres数据库在RDS。当我从本地连接它并通过sqlalchemy插入它时,我可以看到更新的结果,但是当我从Lambda运行相同的代码时,执行显示为完成(即代码正确运行),但结果未在DB中更新。在相同的代码中,当我打印出' SELECT * table_name*的结果时,我可以看到新的行添加,但是当我从本地(使用pgadmin和通过代码)检查该行是否真的添加了,它是缺失的。

我观察到的一个奇怪的事情是,我有一个列'ID',这是一个主键。当我从lambda添加ID为25的行,然后从local添加另一行时,从local添加的行被分配为第27行(而不是26,这被分配给从lambda添加的行,但是我看不到ID为26的行)。

下面是我的代码:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, text
engine = create_engine("postgresql://%s:%s@%s:%s/%s" % (username, password, host, port, database))
conn = engine.connect()
print("CONNECTED TO RDS")
query = 'select * from predictions'
result = conn.execute(text(query)).fetchall()
print("THE QUERY RESULT IS", 'n', result)
upload_query = "INSERT INTO predictions (image_url, image_class) VALUES ('LOCAL_ADD', 'LOCAL_ADD');"
conn.execute(text(upload_query))
query = 'select * from predictions'
result = conn.execute(text(query)).fetchall()
print("THE QUERY RESULT IS", 'n', result)
conn.close()

我的lambda没有VPC。然而,我的RDS数据库有4个安全组,其中两个是入站/出站规则设置为'所有流量'与'0.0.0.0'

在Lambda函数中启用自动提交或显式COMMIT事务

序列值在请求下一个值时更新。这发生在事务之外。它可以被看作发生在一个独立的事务中。这是必要的,以便并发事务可以使用序列,而不会引入等待或死锁。

您已经使用conn.execute执行了更改,但是如果在lambda会话中没有设置autocommit,那么这些更改将不会发布到数据库,直到您使用conn.commit提交它们。所以像这样添加conn.commit()行:

conn.execute(text(upload_query))
conn.commit()

相关内容

  • 没有找到相关文章

最新更新