0

我在我的 ansible 项目中使用 ara 将剧本输出存储到数据库(Mysql)中。有些表不可读我想知道如何转换它以开发一个 php 页面来显示这些值:

这是我的表描述:

mysql> desc data;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| id          | varchar(36)  | NO   | PRI | NULL    |       |
| playbook_id | varchar(36)  | YES  | MUL | NULL    |       |
| key         | varchar(255) | YES  |     | NULL    |       |
| value       | longblob     | YES  |     | NULL    |       |
| type        | varchar(255) | YES  |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+

如您所见,值列是 longblob,因此输出不清楚:

mysql> select value from data;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| value                                                                                                                                                                                                                                         |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| xœmŽË
ƒ0å"¸kMÄG;àÊU«@±5b &!7
ýû&R
¥Åp3Ì$§'fåc’Â!{©” ¸x™ÁQ¢Í"¦ÐíùB©`€‹ãš
                                           b%so­päjTëÌb÷j½9c<×ð_yÑ”»2øaó¢Ipíg;âOºd¬Û€~˜†xÆi~_À¡Ï¿[M“u¼`‘ó*´îáWòìI=N                                                                                                                                                     |
| xœmŽË
ƒ0å"¸³&â£f_påªU Ø1““R
¥Åp3Ì$Çæ0
˜ä}–Â!©” 8{™ÃA¢Í#¦Ð©`€«ãšŒb#Ë`­päbTçÌjwj»:c<×ð_EÙTY|ŸUÁË6µ_ì„?銱þôÃ4Äã0ÎËûŽCñÝjë˜lšà%‹\Ô¡u
                                                                                                  ¿’'ìÂ=O   

我尝试将这些数据转换为使用 UTF-8,但它给了我 null:

SELECT CONVERT(value USING utf8) FROM data;
+---------------------------+
| CONVERT(value USING utf8) |
+---------------------------+
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
| NULL                      |
+---------------------------+
17 rows in set, 18 warnings (0,00 sec)
4

1 回答 1

0

我帮助设计了其中一些模型 :)(尽管我不再是该项目的活跃开发人员)。

您是否考虑过仅使用 Ara Web 界面作为此数据的 UI?像这样直接访问数据库通常是个坏主意,因为它通常没有被设计为稳定的 API:未来的一些更新很有可能会破坏您的代码,因为假设只有 ARA 正在访问数据库.

任何状况之下:

为了节省空间,存储在数据库中的许多值都使用 Python 的zlib.compress方法进行了压缩。这由CompressedData类型处理,如下所示:

class CompressedData(types.TypeDecorator):
    """
    Implements a new sqlalchemy column type that automatically serializes
    and compresses data when writing it to the database and decompresses
    the data when reading it.
    http://docs.sqlalchemy.org/en/latest/core/custom_types.html
    """
    impl = types.LargeBinary

    def process_bind_param(self, value, dialect):
        return zlib.compress(encodeutils.to_utf8(jsonutils.dumps(value)))

    def process_result_value(self, value, dialect):
        if value is not None:
            return jsonutils.loads(zlib.decompress(value))
        else:
            return value

    def copy(self, **kwargs):
        return CompressedData(self.impl.length)

您将需要使用该zlib.decompress方法(或php等效方法)来读取这些值。我不是 PHP 开发人员,但它看起来好像 PHP 作为zlib 模块

于 2019-05-07T13:50:42.650 回答