PostgreSQL未在带有psycopg2的AWS Lambda上插入Python

PostgreSQL未在带有psycopg2的AWS Lambda上插入Python,python,sql,postgresql,aws-lambda,psycopg2,Python,Sql,Postgresql,Aws Lambda,Psycopg2,Python在AWS Lambda中使用psycopg2访问PostgreSQL。 此功能: cur.execute("INSERT INTO table (column1, column2, column3) VALUES ('test1', 'test2', 'test3');") 不向数据库中添加任何行。Psycopg2不会引发错误。PostgreSQL记录语句时不会出错。然而!还有第四列,它是一个自动递增的id。用于跟踪id的序列增加了一个,即使没有添加行。(已经很奇怪了) 如果以任

Python在AWS Lambda中使用psycopg2访问PostgreSQL。
此功能:

cur.execute("INSERT INTO table (column1, column2, column3) VALUES ('test1', 'test2', 'test3');")
不向数据库中添加任何行。Psycopg2不会引发错误。PostgreSQL记录语句时不会出错。然而!还有第四列,它是一个自动递增的id。用于跟踪id的序列增加了一个,即使没有添加行。(已经很奇怪了)

如果以任何其他方式(命令行、pgAdmin、Adminer)发送相同的语句,则该语句有效

我完全不知道发生了什么事

编辑:完整代码:

def db():
    with open('configEC2.json') as json_data_file:
        POSTGRES = json.load(json_data_file)
    db = psycopg2.connect( host=POSTGRES["sql"]["host"], user=POSTGRES["sql"]["user"], password=POSTGRES["sql"]["passwd"], dbname=POSTGRES["sql"]["db"] )
    return db
def dbSetup():
    dbR = db()
    cur = dbR.cursor()
    return cur

cur = dbSetup()
cur.execute("INSERT INTO table (column1, column2, column3) VALUES ('test1', 'test2', 'test3');")
cur.close()

似乎您没有执行
commit
,这不会保存您的代码,因此我建议您执行以下操作:

def db():
    with open('configEC2.json') as json_data_file:
        POSTGRES = json.load(json_data_file)
    db = psycopg2.connect( host=POSTGRES["sql"]["host"], user=POSTGRES["sql"]["user"], password=POSTGRES["sql"]["passwd"], dbname=POSTGRES["sql"]["db"] )
    return db

conn = db()

cur = conn.cursor()

cur.execute("INSERT INTO table (column1, column2, column3) VALUES ('test1', 'test2', 'test3');")

conn.commit()

请注意
conn.commit()
,因为将
insert
提交到数据库中需要它。我以前犯过这个错误,调试时很烦人。

似乎您没有执行
提交操作,这不会保存您的代码,因此我建议您执行以下操作:

def db():
    with open('configEC2.json') as json_data_file:
        POSTGRES = json.load(json_data_file)
    db = psycopg2.connect( host=POSTGRES["sql"]["host"], user=POSTGRES["sql"]["user"], password=POSTGRES["sql"]["passwd"], dbname=POSTGRES["sql"]["db"] )
    return db

conn = db()

cur = conn.cursor()

cur.execute("INSERT INTO table (column1, column2, column3) VALUES ('test1', 'test2', 'test3');")

conn.commit()

请注意
conn.commit()
,因为将
insert
提交到数据库中需要它。我以前犯过这个错误,调试起来很烦人。

快速提问,查询应该是这样的,还是您只是使用一个示例查询来显示它的工作方式?您还可以显示代码的整个部分,执行查询后可能会忘记执行
commit
。查询完全相同,只是名称不同。好的,您介意添加代码的后面部分吗?您可能缺少
commit
,这可以解释为什么您没有收到错误,记录也没有被创建。@HonzaNijaký我们需要更多的代码,只是这一行没有问题,所以我们需要更多的代码来诊断问题。我们应该通过关闭光标来查看连接(减去敏感信息)。处理它…快速提问,查询应该是这样的,还是您只是使用一个示例查询来显示其工作方式?您还可以显示代码的整个部分,执行查询后可能会忘记执行
commit
。查询完全相同,只是名称不同。好的,您介意添加代码的后面部分吗?您可能缺少
commit
,这可以解释为什么您没有收到错误,记录也没有被创建。@HonzaNijaký我们需要更多的代码,只是这一行没有问题,所以我们需要更多的代码来诊断问题。我们应该通过关闭光标来查看连接(减去敏感信息)。处理它…谢谢,工作正常。我以为你应该做cur.commit(),但它是conn.commit()。是的,当你没有看到文档时,它有点让人困惑。以前也弄错了!干杯您还应该关闭光标(如果不需要保持连接打开,请关闭连接)。一般来说,它应该转到
connect()
cursor()
execute()
commit()
cursor.close()
connection.close()
谢谢,可以使用。我以为你应该做cur.commit(),但它是conn.commit()。是的,当你没有看到文档时,它有点让人困惑。以前也弄错了!干杯您还应该关闭光标(如果不需要保持连接打开,请关闭连接)。通常,它应该转到
connect()
cursor()
execute()
commit()
cursor.close(),
connection.close()