我需要用一个查询插入多行(行数不是常数),所以我需要执行如下查询:
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)
但我想要一些更简单的方法。
要以更简单的方式使用单个查询插入多行,您可以使用executemanyPython 中大多数数据库库提供的方法。此方法允许您针对提供的序列中找到的所有参数序列或映射执行数据库操作(查询或命令)。
executemany
psycopg2下面是一个使用流行的 Python PostgreSQL 适配器的示例:
psycopg2
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。此方法比手动构建查询字符串更简洁、更直接。
data
t
如果您使用不同的数据库适配器,概念保持不变,但特定于库的细节可能会略有不同。