我有一个定义如下的PostgreSQL表。
"""
CREATE TYPE similarity AS (
user_id integer,
similarity real,
rank integer
)
""",
"""
CREATE TABLE user_similarities (
user_id int REFERENCES books_user_id (user_id) ON UPDATE CASCADE ON DELETE CASCADE,
similarities similarity[]
)
"""
这是我用于测试的示例:
我想要实现的是更新数组中我的复合类型(相似性)的一个元素。一个示例是将相似性更改为给定值,比如说user_id = 3的1,相似性。user_id= 10。
通过下面的查询,我可以选择user_id = 3并选择similarities.similarity = 10,但是我不知道如何更新表。
sql = """with list_1 as (SELECT *, unnest(similarities) as list_similarities FROM user_similarities WHERE user_id = 3), id_1 as (SELECT * FROM list_1 WHERE(list_1.list_similarities).user_id=10 ) SELECT * FROM id_1"""
我尝试了以下操作:
with list_1 as (SELECT *, unnest(similarities) as list_similarities FROM user_similarities WHERE user_id = 3), id_1 as (SELECT * FROM list_1 WHERE(list_1.list_similarities).user_id=10 ) UPDATE id_1 SET list_similarities.similarity = 1
但是我收到错误消息:关系“ id_1”不存在第2行:... ERE(list_1.list_likeities).user_id = 10)更新id_1 SET l ...
这里是整个功能:
def update_similarity(connection,id_ ): sql = """with list_1 as (SELECT *, unnest(similarities) as list_similarities FROM user_similarities WHERE user_id = 3), id_1 as (SELECT * FROM list_1 WHERE(list_1.list_similarities).user_id=10 ) UPDATE id_1 SET list_similarities.similarity = 1 """ to_insert = (id_,) bol = 0 try: conn = connection # create a new cursor cur = conn.cursor() # execute the INSERT statement cur.execute(sql, to_insert) request = cur.fetchall() if len(request) > 0: bol = 1 cur.close() except (Exception, psycopg2.DatabaseError) as error: print(error) return bol
任何帮助将不胜感激。
我有一个PostgreSQL表,其定义如下。 “”“ CREATE TYPE相似度AS(user_id整数,相似度实数,等级整数)”“”,...
如果我理解正确,您已经知道要为其更新user_id
值的similarity.user_id
和similarity.similarity
。我假设您也知道要使用其更新的值,并且它并不意味着要作为此查询的一部分进行计算。