3

オクターブから sqlite3 を読み書きする方法はありますか?

RのRODBCまたはpythonのsqlite3パッケージのラインに沿って何かを考えていますが、オクターブ用です。

私はオクターブフォージを見ましたhttp://octave.sourceforge.net/packages.php

しかし、postgresql のみをサポートする「データベース」パッケージしか見つかりませんでした。

詳細:

  • OS: Ubuntu 12.04
  • オクターブ: 3.6.2
  • sqlite: 3.7.9
4

5 に答える 5

1

これは古い質問だと思いますが、ここでのほとんどの回答は要点を見逃しているようで、最初にオクターブ内からsqlite3クエリを実行できるかどうかではなく、正式なインターフェースを提供する特注のオクターブパッケージが存在するかどうかに焦点を当てています場所。

したがって、オクターブ経由で sqlite3にアクセスしようとしているだけの人に実用的な答えを提供すると思いました。実際、そうするのは些細なことです。私自身、何度もそうしてきました。

コマンドに対して適切なシステム コールを実行するだけですsqlite3(明らかに、これはシステムに sqlite3 クライアントがインストールされていることを意味します)。これを行う最も便利な方法は、

sqlite3 database.sqlite < FileContainingQuery > OutputToFile

sqlite3 を呼び出すための構文。

出力を変更する sqlite3 コマンドをクエリと一緒に渡して、目的の形式で出力を取得できます。

たとえば、適切なスコアとカウントを csv 形式で返すテーブルから頻度チャートをプロットするおもちゃの例を次に示します (出力からヘッダーと実行時の統計情報が取り除かれます)。

  pkg load io   % required for csv2cell (used to collect results)

% Define database and Query
  Database = '/absolute/path/to/database.sqlite';

  Query = strcat(
  % Options to sqlite3 modifying output format:
    ".timer off            \n",   % Prevents runtime stats printed at end of query
    ".headers off          \n",   % If you just want the output without headers
    ".mode csv             \n",   % Export as csv; use csv2cell to collect results
  % actual query
    "SELECT Scores, Counts \n",
    "FROM Data;            \n"    % (Don't forget the semicolon!)
  );   

% Create temporary files to hold query and results
  QueryFile   = tempname()  ;   QueryFId = fopen( QueryFile, 'w' );
  fprintf( QueryFId, Query );   fclose(  QueryFId);
  ResultsFile = tempname();

% Run query
  Cmd = sprintf( 'sqlite3 "%s" < "%s" > "%s"',  Database, QueryFile, ResultsFile );
  [Status, Output] = system( Cmd );

% Confirm query succeeded and if so collect Results
% in a cell array and clean up temp files.
  if Status != 0,     delete( QueryFile, ResultsFile ); error("Query Failed");
  else,   Results = csv2cell( ResultsFile ); delete( QueryFile, ResultsFile );
  end

% Process Results
  Results  = cell2mat( Results );
  Scores   = Results(:, 1);   Counts  = Results(:, 2);
  BarChart = bar( Scores, Counts, 0.7 ); % ... etc

ほら、ほら

于 2020-01-30T13:15:09.613 に答える
0

このスレッドがかなり古いことは知っていますが、同様のソリューションを探している他の人にとっては、このプロジェクトがそれを提供しているようです.

https://github.com/markuman/go-sqlite

于 2015-02-03T17:17:43.687 に答える
0

既にお気づきのように、データベース パッケージの新しいバージョン (2.0.0) は、postgreSQL のみをサポートしています。ただし、パッケージの古いバージョンは MySQL と SQLite もサポートしていました (それらの最後のバージョンはバージョン 1.0.4でした)。

その問題は、古いデータベース パッケージが新しい Octave および SWIG バージョンで動作しないことです (データベース パッケージが動作した Octave の最後のバージョンは 3.2.4 だったと思います)。メンテナーの不在 (パッケージはほぼ 4 年間放棄された) はさておき、SWIG の使用は、他の開発者が介入するのがより困難になったため、問題になりつつありました. それでも、何人かのユーザーはそれを修正しようとし、いくつかの半分修正が行われました (しかし、リリースされることはありません)。Octave 3.6.2 で SQLite を使用する場合のレポートについては、バグ #38098データベース パッケージの Octave の wiki ページを参照してください

パッケージの新しいバージョンは、パッケージの完全な再起動です。SQLite バインディングの開発に貢献できれば幸いです。

于 2013-02-17T20:35:55.670 に答える
0

MySQL に関して同じ質問をするこのリンクhttp://octave.1599824.n4.nabble.com/Octave-and-databases-td2402806.htmlをチェックしてください。

特に、Martin Helm からのこの返信は、JDBC を使用して JDBC でサポートされているデータベースに接続する方法を示しています。データベースの処理が簡単. それと mysql 用の jdbc ドライバを使用して mysql に接続します (または、想像できる他のすべての適切な jdbc friver を使用します). それは、オクターブから db クエリを使用するときに私が行うことです. 呼び出すよりもはるかに簡単で間接的ではありませんスクリプトと、データベース クエリからの出力の解析。

私が覚えている限りでは、データベース パッケージは何らかの形で壊れています (少なくとも私は一度も使用できませんでした)。"

于 2013-04-11T16:55:23.297 に答える
0

Octave-Forgeによると、答えはノーです。

SQL データベースへのインターフェース。現在は libpq を使用した postgresql のみ。

ただし、Octave C++ API と SQLite C API を使用して、独自のデータベース パッケージを作成できます。

于 2013-02-17T14:57:57.893 に答える