如何使用Python更新或删除在PostgreSQL中输入的最后一个值?

如何使用Python更新或删除在PostgreSQL中输入的最后一个值?,postgresql,python-3.x,sql-update,Postgresql,Python 3.x,Sql Update,我正在PostgreSQL中插入数据,但有时需要更新输入的值。我执行了以下操作以获取最后输入的值,但不确定如何更新它 def add_data(w1,w2): conn_string = "host='localhost' dbname='Aspentiment' user='postgres' password='pwd'" conn=psycopg2.connect(conn_string) cursor = conn.cursor() foo= "INSE

我正在PostgreSQL中插入数据,但有时需要更新输入的值。我执行了以下操作以获取最后输入的值,但不确定如何更新它

def add_data(w1,w2):
    conn_string = "host='localhost' dbname='Aspentiment' user='postgres' password='pwd'"
    conn=psycopg2.connect(conn_string)
    cursor = conn.cursor()

    foo= "INSERT INTO proccessing.aspects(aspects_name,sentiments) VALUES('%s','%s')" %(w1,w2)
    cursor.execute(foo)
    conn.commit()
    conn.close()

def add_Neg_data(w1): 
    conn_string = "host='localhost' dbname='Aspentiment' user='postgres' password='pwd'"
    conn=psycopg2.connect(conn_string)
    cursor = conn.cursor()    
    cursor.execute("SELECT aspects_name, sentiments FROM proccessing.aspects")
    bgrow = cursor.fetchall()[-1]
    row = bgrow[1]
    print(row)
    foo= "INSERT INTO proccessing.aspects(aspects_name,sentiments) VALUES('%s','%s')" %(w1)
    cursor.execute(foo)
    conn.commit()
    conn.close()
然后在某个时候,我使用了两个函数,比如

add_data(word1,word2)
在这些情况下,我需要更新输入的word2,所以我想使用另一个函数来更新

add_Neg_data(word1,new_word)
到目前为止,我输入了最后一个单词,但不知道如何更新这个单词。
有人能帮我吗?

尽管这并不能回答您关于Python的具体问题,但我希望它能为您提供足够的信息,为您指明正确的方向。不幸的是,我不懂Python。我说的是Perl,尽管我被告知Perl是反Python的,但我也被告知它在概念上是相似的

本质上,我认为您需要的是returning子句,它允许insert或update语句将值返回给颁发者

假设您的表如下所示:

create table proccessing.aspects (
  id serial,
  aspects_name text,
  sentiments text
);
在插入创建某种形式的代理键时,我假设是这样,否则我不知道如何解决您的问题,这意味着您的插入将导致自动生成id值

以下语句不仅会执行insert,还会返回id的值:

同样,我不会说Python,但在C中,执行命令基本上有三种基本方式:

command.ExecuteDataReader();   -- used for reading rows from a query
command.ExcecuteNonQuery();    -- execute a SQL command that is not a select
command.ExecuteScalar();
我希望您的DB适配器与此类似。在本例中,我们将使用最后一个ExecuteScalar,它将返回结果id的对象。它也可以比本例更常用,事实上,当您保证从查询中获取单个值时,例如从任何查询中获取select count*

如果有帮助的话,与此等效的Perl是selectrow\u数组

同样,我希望能为您提供更多特定于Python的信息,但底线是假设您有一个通过串行、触发器或默认值填充的某种类型的代理键,我想您需要的是returning子句

从那里,您应该能够进行正常的更新

update proccessing.aspects
set
  aspects_name = :ASPECTS,
  sentiments = :SENTIMENTS
where
  id = :ID
int id = Convert.ToInt32(command.ExecuteScalar());
my ($id) = $dbh->selectrow_array($aspects, $sentiments);
update proccessing.aspects
set
  aspects_name = :ASPECTS,
  sentiments = :SENTIMENTS
where
  id = :ID