Python psycpg2插入失败

Python psycpg2插入失败,python,node.js,postgresql,psycopg2,Python,Node.js,Postgresql,Psycopg2,我得到了一些python代码(psycopg2),用它可以将数据插入数据库: def debug(self): try: self.connection.execute( "SELECT test();") res = self.connection.fetchall() print(res) except Exception as e: print(e) return pgsq

我得到了一些python代码(psycopg2),用它可以将数据插入数据库:

def debug(self):
    try:

        self.connection.execute(
            "SELECT test();")
        res = self.connection.fetchall()
        print(res)

    except Exception as e:
        print(e)
    return
pgsql中的test()函数如下所示:

CREATE OR REPLACE FUNCTION test(
) RETURNS setof varchar
AS $Body$
BEGIN
    INSERT INTO Linie(name) VALUES('3');
    RETURN QUERY(SELECT * FROM linie);
END;
$Body$ LANGUAGE plpgsql;
当我更改“name”值并在pgAdmin中执行查询时,数据库中现在有一个条目。但是,当从python调用函数时,它总是覆盖该值

该表定义如下:

CREATE TABLE Linie(
name varchar,
PRIMARY KEY (name)
);
例如,使用pgAdmin,我可以插入1,2,3,4,5。 对于python,在运行了5个等效查询之后,它只需要5个

使用nodeJS调用测试函数效果良好

当从python调用函数一次,然后更改插入值,然后再次从python调用时,值不会被替换,而是被插入

此外,它不会抛出任何错误,并按其应该的方式返回表(替换的值除外)。
为什么会发生这种情况?我可以做些什么来阻止它?

默认情况下,除非在执行SQL后显式调用
connection.commit()
,否则Psycopg2不会提交对数据库所做的更改。您可以这样修改代码:

def debug(self):
    try:
        self.connection.execute(
            "SELECT test();")
        res = self.connection.fetchall()
        self.connection.commit()
        print(res)
    except Exception as e:
        print(e)
    return
但是,请小心操作,因为我没有关于
self.connection
是什么的确切信息,因此我假设它属于
connection
:) 或者,当您设置与DB的连接时,将属性
自动提交
设置为
,例如:


如果您已经在使用“自动提交”,请告诉我,我将再次查看您的问题。

问题在于未使用“提交”,谢谢。是的,这就是我所用的抱歉没有澄清。
self.connection = psycopg2.connect(user='foo', password='bar', host='localhost', dbname='mydb')
self.connection.autocommit = True