数据库表的批量插入

-1 投票
3 回答
2727 浏览
提问于 2025-04-15 13:40

我有一个数组,想要在一个查询中把它插入到一个表里。有什么好主意吗?

3 个回答

0

如果你在使用PostgreSQL数据库,可以使用COPY语句

1

作为一种不太有效的(单个插入)一行代码:

data = [{'id': 1, 'x': 2, 'y': 4}, {'somethig': 'other', 'otherfield': 5, 'y': 6}]
table = 'table_name'
connection = connect() # DBAPI connection

map(connection.cursor().execute, ('INSERT INTO %s (%s) VALUES (%s)' % ('table', ','.join(x), ','.join(['%s'] * len(x))) for x in data), (x.values() for x in data))
3

如果你使用dbapi来访问数据库,那么connection.executemany()这个方法是可以用的。

con.executemany("INSERT INTO some_table (field) VALUES (?)", [(v,) for v in your_array])

绑定参数的格式取决于你使用的数据库,比如sqlite用的是?,mysql用的是%s,postgresql则用%s或者%(key)s,如果你传入的是字典的话。为了简化这个过程,你可以使用SQLAlchemy:

import sqlalchemy as sa
metadata = sa.MetaData(sa.create_engine(database_url))
some_table = Table('some_table', metadata, autoload=True)
some_table.insert([{'field': v} for v in your_array]).execute()

撰写回答