我有一个包含几千行的表,其中包含几个整数列和一个 blob 列。我想将每一行作为自己的文件转储,其中 blob 是内容,整数用于形成文件名。这是一次性操作,如此快速和肮脏是可以的。一个限制是我在这个环境中几乎没有安装任何工具,因此无论我使用什么,这将成为开发成本的一部分。
编辑:我最终从另一个盒子中使用了 C#。只需下载一个程序集和与以下答案中给出的大致相同数量的代码。
PHP中的快速操作:
<?php
$connection = mysql_connect("mysqlserver.example.com", "username", "password");
mysql_select_db("dbname");
$sql = "SELECT `blob_column`, `id` FROM `mytable`";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)){
file_put_contents("file" + $row["id"] + ".dat", $row["blob_column"]);
}
mysql_close($connection);
您可能可以使用访问 MySQL 的任何方法来做一些类似的事情,但是 AFAIK,没有办法用纯 SQL 来做到这一点。
在 Common Lisp 中,使用 CLSQL,类似下面的东西应该可以工作(未经测试,目前没有安装 MySQL):
(require 'clsql)
(require 'clsql-mysql)
(clsql:connect (host db user password port) :database-type :mysql)
(clsql:do-query ((col1 col2 blob) "select col1,col2,blob from blobtable")
(with-open-file (outfile (format nil "~a-~a" col1 col2)
:direction :output
:element-type 'byte)
(write-sequence blob outfile)))
当然,您必须填写主机、数据库等(端口是可选的),并调整查询。