小能豆

psycopg2:使用一个查询插入多行

javascript

我需要用一个查询插入多行(行数不是常数),所以我需要执行如下查询:

INSERT INTO t (a, b) VALUES (1, 2), (3, 4), (5, 6);

我知道的唯一方法是

args = [(1,2), (3,4), (5,6)]
args_str = ','.join(cursor.mogrify("%s", (x, )) for x in args)
cursor.execute("INSERT INTO t (a, b) VALUES "+args_str)

但我想要一些更简单的方法。


阅读 45

收藏
2024-07-18

共1个答案

小能豆

要以更简单的方式使用单个查询插入多行,您可以使用executemanyPython 中大多数数据库库提供的方法。此方法允许您针对提供的序列中找到的所有参数序列或映射执行数据库操作(查询或命令)。

psycopg2下面是一个使用流行的 Python PostgreSQL 适配器的示例:

import psycopg2

# Establish the connection
conn = psycopg2.connect(dbname="yourdbname", user="yourusername", password="yourpassword", host="yourhost")

# Create a cursor object
cursor = conn.cursor()

# Define the query and the data
query = "INSERT INTO t (a, b) VALUES (%s, %s)"
data = [(1, 2), (3, 4), (5, 6)]

# Execute the query
cursor.executemany(query, data)

# Commit the changes
conn.commit()

# Close the cursor and the connection
cursor.close()
conn.close()

在此示例中,executemany负责将每个元组插入data到表中t。此方法比手动构建查询字符串更简洁、更直接。

如果您使用不同的数据库适配器,概念保持不变,但特定于库的细节可能会略有不同。

2024-07-18