我在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)
到目前为止,我输入了最后一个单词,但不知道如何更新单词。 有人可以帮帮我吗?
答案 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