Я написал следующий код для вставки данных в MEMSql, который имеет почти аналогичный синтаксис, как в MySQL.Внедрение пакетной вставки для повышения производительности
def get_connection(db=DATABASE):
""" Returns a new connection to the database. """
return database.connect(host=HOST, port=PORT, user=USER, password=PASSWORD, database=db)
def insert_data(data):
print 'inserting data...'
for item in data:
vars_to_sql = []
keys_to_sql = []
print(item)
for key,value in item.iteritems():
if key == '__osHeaders':
value = str(value)
if isinstance(value, unicode):
vars_to_sql.append(value.encode('ascii', 'ignore'))
keys_to_sql.append(key.encode('ascii', 'ignore'))
else:
vars_to_sql.append(value)
keys_to_sql.append(key)
keys_to_sql = ', '.join(keys_to_sql)
with get_connection() as conn:
c = conn.execute("INSERT INTO tablename (%s) VALUES %r" % (keys_to_sql, tuple(vars_to_sql),))
print c
Имена полей не могут быть жестко закодированы, поскольку они могут меняться в соответствии с данными, которые я получаю с другого конца. В любом случае, это словарь, который я повторяю здесь. Поскольку эта единственная вставка очень медленная, мне нужно взять размер партии в качестве переменной, сформировать оператор запроса и вставить его соответственно. Таким образом, запрос для размера партии 2 будет INSERT INTO tablename col1, col2 VALUES ('a', 'b'),('c','d')
Пожалуйста, помогите мне, как представить его здесь.
Возможно, посмотрите http://stackoverflow.com/a/6482610/3207406 – oliverpool
Или, может быть, http://stackoverflow.com/questions/8134602/psycopg2-insert-multiple-rows-with-one-query – oliverpool
Второй не задает поля. 1-й я должен получить копию данных, которые мне нужны, и выполнить. Почему я не могу сделать это в том же словаре, что у меня есть –