2009-08-18 3 views
-1

У меня есть массив, который я хочу вставить в один запрос в таблицу. Есть идеи?объемная вставка в таблице db

+0

которые RDBMS вы говорите? –

+0

И какой ОРМ, если есть? Вы не предоставили нам достаточно информации. –

+0

Это первоклассная функция DBAPI. http://www.python.org/dev/peps/pep-0249/ Поскольку .executemany делает это, это не может быть вашим вопросом. Что ты спрашиваешь? –

ответ

3

Если вы используете dbapi для доступа к базе данных, то работает метод connection.executemany().

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

Формат bindparameter зависит от базы данных, SQLite использования?, MySQL использует% S, postgresl использует% S или% (ключ) сек при прохождении в dicts. Для абстрагирования этого вы можете использовать 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() 
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)) 
Смежные вопросы