数据库表的批量插入
我有一个数组,想要在一个查询中把它插入到一个表里。有什么好主意吗?
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()