Лучший способ интегрировать Python и JavaScript?

Попытка выяснить проблему

Из следующей документации по методу OleDbDataAdapter.Fill (DataTable, Object) :

ВНИМАНИЕ [1149 ]
При использовании объектов ADO Recordset или Record в сочетании с приложениями .NET Framework всегда вызывайте Close, когда вы закончите. Это гарантирует своевременное освобождение базового соединения с источником данных, а также предотвращает возможные нарушения доступа из-за того, что неуправляемые объекты ADO возвращаются сборщиком мусора, когда существующие ссылки еще существуют.

blockquote>

Также имеется в виду Заполнение DataSet набором записей ADO или Record - документация :

Обратите внимание, что перегрузка OleDbDataAdapter.Fill, которая принимает DataSet и Объект ADO неявно вызывает Close объекта ADO, когда операция Fill завершена. Вам необходимо явно закрыть объект ADO Recordset или Record после вызова перегрузки OleDbDataAdapter.Fill, которая принимает DataTable.

blockquote>

Это означает, что при вызове метода Fill через RecordSet вы должны закрыть его перед повторным использованием, иначе строки не будут возвращены.


Возможные обходные пути

Я действительно не знаю, как закрыть набор записей из переменной Object, но я попытаюсь предоставить некоторые возможные обходные пути:

(1) Сохранение в DataTable

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

  1. Как только мой Recordset @[User::FilePath] будет заполнен, я использую задачу сценария и Заполните его в DataSet ds, используя OledbDataAdapter и DataTable.

  2. Затем, в той же задаче сценария, я поместил значение ds в новую переменную типа объекта @[User::FilePathDataTable].

При этом тип данных FilePathDataTable становится System.Data.DataTable.

Этот набор данных можно легко использовать любое количество раз внутри цикла For-Each.

Я не использую метод DataAdapter.Fill() внутри цикла ForEach для ssis. Я просто присваиваю значение @[User::FilePathDataTable] новому набору данных и использую его для итераций.

blockquote>

Ссылка

(2) Использование источника набора записей

Вместо использования компонента Script для генерации строк из переменной Object попробуйте сделать это с помощью RecordSet Source.

(3) Приведение переменной в качестве набора записей

Я не проверял этот подход, и я не уверен, будет ли он работать с объектной переменной

Требуется ссылка на объекты данных Microsoft ActiveX.

List PublicHolidays = new List();

var rs = ((ADODB.Recordset)Variables.LISTPublicHolidays);
OleDbDataAdapter A = new OleDbDataAdapter();
DataTable dt = new DataTable();
A.Fill(dt, rs);

foreach (DataRow row in dt.Rows)
{
    object[] array = row.ItemArray;
    var Public = new PublicHoliday()
    {
        DateKey = int.Parse(array[0].ToString()),
        FullDateAlternateKey = DateTime.Parse(array[1].ToString())
    };
    PublicHolidays.Add(Public);
}
rs.Close();

Обновление 1

на основе приведенных ниже комментариев попробуйте удалить метод rs.Close(); из первого и второго сценария перед выполнением метода Fill используйте метод rs.MoverFirst(), чтобы иметь возможность извлекать информацию из набора записей. s>

Третий подход удален по следующей ссылке:

  • [1113 ] Методы MoveFirst, MoveLast, MoveNext и MovePrevious (ADO)

63
задан Jacques de Hooge 29 January 2017 в 19:35
поделиться

6 ответов

Вот что-то, обертка Python вокруг интерпретатора SeaMonkey Javascript... http://pypi.python.org/pypi/python-spidermonkey

20
ответ дан David Z 24 November 2019 в 16:26
поделиться

Вы могли бы также хотеть проверить проект PyPy - у них есть Python к (чему-либо) компилятор, включая Python к JavaScript, C, и llvm. Это позволяет Вам писать свой код в Python и затем компилировать его в JavaScript, как Вы требуете.

http://codespeak.net/pypy

Кроме того, проверьте информативный блог:

http://morepypy.blogspot.com/

К сожалению, хотя, Вы не можете преобразовать JavaScript в Python этот путь. Это, кажется, работает действительно хорошо в целом, они раньше имели JavaScript (сделанный из скомпилированного Python) версия игры Bub'n'Bros онлайн (хотя сервер снизился некоторое время).

http://bub-n-bros.sourceforge.net

2
ответ дан 24 November 2019 в 16:26
поделиться

Существует мост на основе JavaScriptCore (из WebKit), но это довольно неполно: http://code.google.com/p/pyjscore/

2
ответ дан Miles 24 November 2019 в 16:26
поделиться

Если Ваш просто интересующийся совместным использованием сложных типов данных между JavaScript и Python, проверьте jsonpickle. Это переносит стандартные библиотеки Python JSON, но имеет некоторый ум в сериализации и десериализации классов Python и других типов данных.

Довольно много проектов Google App Engine пользовались этой библиотекой. Joose и FirePython оба включают jsonpickle.

6
ответ дан John Paulett 24 November 2019 в 16:26
поделиться

Как насчет pyjs?

С вышеупомянутого веб-сайта:

pyjs является Платформа разработки Богатого интернет-приложения (RIA) и для сети и для Рабочего стола. С pyjs можно записать приводимые в действие JavaScript веб-приложения полностью в Python.

26
ответ дан Elazar 24 November 2019 в 16:26
поделиться

есть два проекта, которые позволяют «очевидный» переход между объектами python и объектами javascript, с «очевидными» переводами из int или float to Number и str или unicode to String: PyV8 и, как уже упоминал один автор: python-spidermonkey .

на самом деле существует две реализации pyv8 - Первоначальный эксперимент был выполнен Себастьеном Луизелем, а второй (в активной разработке) - Флайером Лю.

Мой интерес к этим проектам заключался в том, чтобы связать их с пижамой , компилятором python-to-javascript , чтобы создать ускоритель Python JIT.

так что есть много всего - это просто зависит от того, что вы хотите сделать.

9
ответ дан 24 November 2019 в 16:26
поделиться
Другие вопросы по тегам:

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