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

时间:2016-01-11 12:43:46

标签: 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= "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)

到目前为止,我输入了最后一个单词,但不知道如何更新单词。 有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

虽然这并没有回答你关于Python的具体问题,但我希望它会给你足够的篇幅来指出你正确的方向。不幸的是,我不了解Python。我确实说过Perl,尽管它是反Python的(据我所知),我也被告知它在概念上是相似的。

基本上,我认为你想要的是returning子句,它允许insert或update语句将值返回给发行者。

假设您的表格如下:

create table proccessing.aspects (
  id serial,
  aspects_name text,
  sentiments text
);

你的插入内容正在创建某种形式的代理键(我假设是这种情况,否则我不知道如何解决你的问题)这意味着你的插入将导致{{1}的自动生成}值。

以下语句不仅会执行插入操作,还会返回id

的值
id

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

insert into proccessing.aspects
(aspects_name,sentiments)
values
(:ASPECTS, :SENTIMENTS)
returning id

我希望您的数据库适配器类似。在这种情况下,我们将使用最后一个command.ExecuteDataReader(); -- used for reading rows from a query command.ExcecuteNonQuery(); -- execute a SQL command that is not a select command.ExecuteScalar(); ,它将返回结果ExecuteScalar的对象。当您确保从查询中获取单个值时,也可以使用它(实际上比这个例子更常见),例如id

select count (*) from whatever

如果有帮助,与此等效的Perl为int id = Convert.ToInt32(command.ExecuteScalar());

selectrow_array

同样,我希望我能为您提供更多特定于Python的信息,但最重要的是假设您拥有通过my ($id) = $dbh->selectrow_array($aspects, $sentiments); 填充的某种类型的代理键,触发器或默认值,I认为你想要的是serial条款。

从那里,您应该可以进行正常更新。

returning