我试图用一个元组一次更新几行。我从这篇文章中了解了如何构造sql语句,但是在< code>psycopg2中实现它被证明更具挑战性。以下是我所知道的:
c = db.cursor()
new_values = (("Richard",29),("Ronald",30))
sql = """UPDATE my_table AS t
SET name = e.name
FROM (VALUES %s) AS e(name, id)
WHERE e.id = t.id;"""
c.execute(sql, (new_values,))
结果出现错误:ProgrammingError:表“e”有1列可用,但指定了2列。这是因为
FROM
子句被解释为:
FROM (VALUES (("Richard",29),("Ronald",30)))
而不是:
FROM (VALUES ("Richard",29),("Ronald",30))
我可以通过执行以下操作来解决这个问题,但这似乎不安全:
import re
c = db.cursor()
sql = """UPDATE my_table AS t
SET name = e.name
FROM (VALUES %s) AS e(name, id)
WHERE e.id = t.id;"""
sql = c.mogrify(sql, (new_values,))
# Replace the first occurance of '((' with '('.
sql = sql.replace('((', '(',1)
# Replace the last occurance of '))' with ')'.
sql = re.sub(r'(.*)\)\)', r'\1)', sql)
sql = c.execute(sql)
有更好的方法吗?
这篇文章为我指出了正确的方向。extras.execute_values
的文档还包含一个使用 UPDATE
子句的很好示例。
c = db.cursor()
update_query = """UPDATE my_table AS t
SET name = e.name
FROM (VALUES %s) AS e(name, id)
WHERE e.id = t.id;"""
psycopg2.extras.execute_values (
c, update_query, new_values, template=None, page_size=100
)
我试图弄清楚如何将值的元组插入到预定义的表中,而不需要像这样的简单语法: 因为我的元组具有如下正确的值序列: 我想知道一些简单的解决方案:-)比如: 由于我已经创建了表架构并且元组具有相同的属性序列,因此我认为这是可以做到的,而无需将所有参数逐个传递给cur.execute()
问题内容: 我是python的新手,所以这个问题可能有点基本。我有一个元组,其中包含以下内容: 我想更改此元组中的第一个值(即),但我知道元组是不可变的,因此将不起作用。我该如何实现? 问题答案: 首先,您需要问,为什么要这样做? 但是可以通过: 但是,如果您需要进行更改,那么最好将其保留为
问题内容: 如何从列表中的每个元组返回第二个值? 所需的输出: 问题答案: 具有列表理解能力。
问题内容: 我读过这篇文章和同一个人的这篇文章,说您无法更新数组元素。 我还阅读了最近的一篇文章,有人说可以用某种方式完成此操作,但是我在文档中都无法获得有关stackoverflow的任何信息。 有什么办法可以解决这个问题?谢谢! 问题答案: 实际上,写这些答案的“家伙”是我:)那时,还没有一种更新数组元素的方法。只能存储数组,而 不能 更新数组成员。 现在,在更新文档时,您可以将第二个参数传递
下面我有以下数据。 所以,我不知道为什么UDF可以使用int而不能使用CharArray。此外,我觉得可能有一种方法可以做到这一点,而不使用UDF..但不确定从哪里开始。对这里可能发生的事情有什么建议吗?
本文向大家介绍计算Python中元组列表中的元组出现,包括了计算Python中元组列表中的元组出现的使用技巧和注意事项,需要的朋友参考一下 列表由元组组成。在本文中,我们将计算列表中存在的唯一元组的数量。 使用defaultdict 我们将给定列表视为defaultdict数据容器,并使用in条件对其中的元素进行计数。 示例 输出结果 运行上面的代码给我们以下结果- 带柜台和链条 计数器和链函数是