我可以使用八度音程访问sqlite3吗?

时间:2013-02-17 14:37:17

标签: database sqlite odbc octave

有没有办法从octave读取和写入sqlite3?

我正在考虑使用R中的RODBC或python中的sqlite3包,但是对于八度音程。

我查看了octave-forge http://octave.sourceforge.net/packages.php

但是只能找到'database'包,它只支持postgresql。

详细说明:

  • OS:Ubuntu 12.04
  • Octave:3.6.2
  • sqlite:3.7.9

5 个答案:

答案 0 :(得分:1)

根据Octave-Forge,答案是否定的。

  

SQL数据库的接口,目前只使用libpq的postgresql。

但您可以使用带有SQLite C API的Octave C ++ API编写自己的数据库包

答案 1 :(得分:1)

正如您已经发现的那样,新版本的数据库包(2.0.0)仅支持postgreSQL。但是,该软件包的旧版本也支持MySQL和SQLite(最后一个版本是version 1.0.4)。

它的问题是旧的数据库包不适用于新的Octave和SWIG版本(我认为数据库包工作的最后一个版本的Octave是3.2.4)。除了缺乏维护者(软件包被放弃了将近4年)之外,SWIG的使用正成为一个问题,因为它让其他开发人员更难以介入。但是,有些用户试图修复它并且已经完成了一些修复(但从未发布过)。有关在Octave 3.6.2中使用SQLite的一些报告,请参阅bug #38098Octave's wiki page on the database package

包的新版本是包的完全重启。如果您可以为SQLite绑定做出贡献,那将会很棒。

答案 2 :(得分:1)

我意识到这是一个古老的问题,但是这里的大多数答案似乎都没有讲到重点,而是着眼于是否存在提供正式接口的定制八度音程包,而不是根本不可能从八度音程内执行sqlite3查询首先。

因此,我想为任何试图通过八度访问 sqlite3的人提供一个实用的答案;这样做实在是微不足道的,我自己也这样做过很多次。

只需对sqlite3命令进行适当的系统调用(显然这意味着您在系统上安装了sqlite3客户端)。我发现最方便的方法是使用

sqlite3 database.sqlite 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

Et,voilà

答案 3 :(得分:0)

查看此链接http://octave.1599824.n4.nabble.com/Octave-and-databases-td2402806.html,该链接询问有关MySQL的相同问题。

特别是Martin Helm的回复指出了使用JDBC连接任何JDBC支持的数据库的方法 - “看看octave java包(octave-forge)中的java绑定,它是 维护,它的工作原理。 Java非常强大且易于数据库处理。 使用和mysql的jdbc驱动程序连接到mysql(或与 适当的jdbc friver你可以想象的其他一切)。这就是我 从octave使用db查询时执行。更容易,更不间接 调用脚本并解析数据库查询的输出。

据我所知,数据库包以某种方式被破坏(至少我从来没有 能够使用它)。 “

答案 4 :(得分:0)

我知道这个帖子已经很老了,但对于那里寻找类似解决方案的其他人来说,这个项目似乎提供了它。

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