当前位置: 首页 > 知识库问答 >
问题:

将元组插入到表中 - psycopg2

单于浩邈
2023-03-14

我试图弄清楚如何将值的元组插入到预定义的表中,而不需要像这样的简单语法:

cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)",
...      (100, "abc'def"))

因为我的元组具有如下正确的值序列:

my_tuple = ('D', 'Z107383320', '99501', '995013688', None, '36', '88', '36', '88', 'A', 'F', 'C083', '', 'BARROW', 'ST', '', '0000000605', '0000000605', 'O', 'DOCTORS COLLECTIONS SVC', 'STE', '00000001', '00000001', 'O', 'B', '', '', '020312', 'AK', '020', 'AL', '', '', 'Z10014', 'zip4mst9')

我想知道一些简单的解决方案:-)比如:

cur.execute("INSERT INTO test (*) VALUES (*)",
    ...      (my_tuple))

由于我已经创建了表架构并且元组具有相同的属性序列,因此我认为这是可以做到的,而无需将所有参数逐个传递给cur.execute()

共有2个答案

申高峰
2023-03-14

鉴于:

t = (100, "abc'def")

然后:

sql = "INSERT INTO test (num, data) VALUES (" + ",".join(["%s"]*len(t)) + ")"
cur.execute(sql, t)

即每个字段重复一次占位符,用逗号分隔。

是的,这很难看,但是没有神奇的“所有参数”通配符。或许应该有。

慕容星晖
2023-03-14

使用这张桌子

create table t (
    a int,
    b text
);

省略列列表,并将元组作为单个值传递

query = """
    insert into t values %s
    returning *
"""
my_tuple = (2, 'b')

cursor.execute(query, (my_tuple,)) # Notice the comma after my_tuple
rs = cursor.fetchall()
conn.commit()
for row in rs:
    print row

指纹

(2, 'b')

完成上述操作后,在我看来,不明确列出列是不好的做法

 类似资料:
  • 问题内容: 是的,我知道元组是不可变的,但是这种情况使得我需要在每个元组中插入一个额外的值。因此,其中一项是金额,我需要在其旁边添加其他货币的新项目,如下所示: 可能? 谢谢! 问题答案: 您可以将其转换为列表,插入项目,然后将其转换回元组。

  • 我使用的数据库是postgresql。我想做的是:- 我有一个存储不同字符串值的数组(例如大小为4[a, b, c, d] 我有个表列叫"秘密" 我想将数组中的所有值插入到表中的每一行(例如,假设表中有4行,第1行、第2行、第3行和第4行。数组中的值“a”应该插入到第1行,而值“b”应该插入到第2行,其他行也是如此。基本上只更新所有行。 这是我的代码:- 错误,我得到“类型:不支持的类型[]字符串

  • 我有一个登记表,并将插入数据输入到两个不同的表使用注册功能。这是表结构: 使用者 用户id(int) 用户电子邮件(varchar(64)) 用户名(varchar(64)) 用户通行证(varchar(64)) 轮廓 教授id(int) 用户id(int) 名字(varchar(64)) 姓氏(varchar(64)) …(其他领域) 我将变量放入两个不同的数组($data1) 模型是这样的:

  • 我正在尝试使用单个表将数据插入到不同的表中,并且我正在插入的表具有主键。

  • 问题内容: 我有一个类似于以下的元组列表: 我想创建一个简单的单线,这将给我以下结果: 就像执行以下操作: 我相信这很简单,但是我想不到。 注意:我已经看过类似的问题: 如何在Python中的元组列表中对每个元组的第一个值求和? 问题答案: 使用和: 要么: 结果: