我在我的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 | |
+-------------+--------------+------+-----+---------+-------+
您看到value列是longblob,因此输出不清楚:
mysql> select value from data;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| value |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| xœmŽË
ƒ0å"¸kMÄG;àÊU«@±5b &!7
ýû&R
¥Åp3Ì$§'fåc’Â!{©” ¸x™ÁQ¢Í"¦ÐíùB©`€‹ãš
b%sopä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)
答案 0 :(得分: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 module。