Каков правильный способ загрузки Pandas в таблицу SQL Server? [Дубликат]

Вот более краткий ответ для людей, которые ищут быструю ссылку, а также некоторые примеры с использованием обещаний и асинхронных / ожидающих.

Начните с наивного подхода (который не работает) для функция, вызывающая асинхронный метод (в данном случае setTimeout) и возвращает сообщение:

function getMessage() {
  var outerScopeVar;
  setTimeout(function() {
    outerScopeVar = 'Hello asynchronous world!';
  }, 0);
  return outerScopeVar;
}
console.log(getMessage());

undefined регистрируется в этом случае, поскольку getMessage возвращается до вызова setTimeout и обновления outerScopeVar.

Двумя основными способами его решения являются обратные вызовы и обещания:

Обратные вызовы

Здесь изменение состоит в том, что getMessage принимает параметр callback, который будет вызываться для доставки результатов обратно к вызывающему коду после его доступности.

function getMessage(callback) {
  setTimeout(function() {
    callback('Hello asynchronous world!');
  }, 0);
}
getMessage(function(message) {
  console.log(message);
});

Обещает

Обещания предоставляют альтернативу который является более гибким, чем обратные вызовы, потому что их можно комбинировать естественно для координации нескольких асинхронных операций. Стандартная реализация Promises / A + изначально представлена ​​в node.js (0.12+) и многих текущих браузерах, но также реализована в таких библиотеках, как Bluebird и Q .

function getMessage() {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      resolve('Hello asynchronous world!');
    }, 0);
  });
}

getMessage().then(function(message) {
  console.log(message);  
});

jQuery Отложенные

jQuery предоставляет функциональные возможности, аналогичные обещаниям с его отсрочкой.

function getMessage() {
  var deferred = $.Deferred();
  setTimeout(function() {
    deferred.resolve('Hello asynchronous world!');
  }, 0);
  return deferred.promise();
}

getMessage().done(function(message) {
  console.log(message);  
});

async / await

Если ваша среда JavaScript включает поддержку async и await (например, Node.js 7.6+), то вы может использовать обещания синхронно в пределах функций async:

function getMessage () {
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            resolve('Hello asynchronous world!');
        }, 0);
    });
}

async function main() {
    let message = await getMessage();
    console.log(message);
}

main();

14
задан joris 4 September 2014 в 18:50
поделиться

2 ответа

Обновление: эта функциональность была объединена в pandas master и будет выпущена в 0.15 (возможно, в конце сентября), благодаря @artemyk! См. https://github.com/pydata/pandas/pull/8062

Итак, начиная с 0,15, вы можете указать аргумент chunksize и, например, просто выполните:

df.to_sql('table', engine, chunksize=20000)
14
ответ дан joris 31 August 2018 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: