python - 从flask SQLAlchemy读取字符数组而不是字符串数组

标签 python arrays postgresql sqlalchemy flask-sqlalchemy

我在 postgresql 中创建了一个下表.

class Test(db.Model):
    __tablename__ = 'Test'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    genres = db.Column(db.ARRAY(db.String(120)))

保存 genres进入测试表,我从用户界面读取值并通过以下代码将其存储在数据库中,
genres = request.form.getlist('genres')
test = Test(name=name, genres=genres)
    db.session.add(test)
    db.session.commit()

当我从数据库中读取它时,
test = Test.query.get(test_id)
data = test.serialize()
print(f'Data => {data}')

问题我遇到的是当我阅读时genres从测试表中,它以字符数组的形式返回,
'genres': ['{', 'A', 'l', 't', 'e', 'r', 'n', 'a', 't', 'i', 'v', 'e', ',', 'B', 'l', 'u', 'e', 's', ',', 'C', 'l', 'a', 's', 's', 'i', 'c', 'a', 'l', '}']

而不是它们被创建/存储和保存到表中的方式,这是一个字符串数组,
genres = ['Alternative', 'Blues', 'Classical']

编辑 : 即使我之前写了结果Serialization碰巧我仍然看到这个问题。这是结果 genres运行`test.query.get('id')后,
genres: ['{', 'A', 'l', 't', 'e', 'r', 'n', 'a', 't', 'i', 'v', 'e', ',', 'B', 'l', 'u', 'e', 's', ',', 'C', 'l', 'a', 's', 's', 'i', 'c', 'a', 'l', '}']

我究竟做错了什么?

最佳答案

我最近遇到了这个问题,但找不到根本原因。奇怪的是,行为并不一致。其中一个表将正确转换为 JSON,而其他一些则不会。

我的解决方案是编写一个修复损坏格式的函数。

def fix_json_array(obj, attr):
    arr = getattr(obj, attr)
    if isinstance(arr, list) and len(arr) > 1 and arr[0] == '{':
        arr = arr[1:-1]
        arr = ''.join(arr).split(",")
        setattr(obj,attr, arr)

然后我在查询表后简单地放置它。
record = myTable.query.get(row_id)
fix_json_array(record, "genres")

关于python - 从flask SQLAlchemy读取字符数组而不是字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59362348/

相关文章:

python - 使用 feedparser 解析 RSS feed 中的所有时间戳

python - Django ·奥斯卡获得最便宜的报价

python - "Apps aren' t 已加载 "and "django.core.exceptions.ImproperlyConfigured“在 Django 中?

php - 将数据库表存储到数组php

python - 带有 Python 的 MySQL 连接器 : getting data by field name

javascript - 向对象添加条目

java - 如何将多个json网址的内容添加到单个json对象中

sql - 什么是正确的 SQL 语句来实现以下结果

sql - 创建链接到另外 2 个表的表的聚合查询

java - 如何从数据库中的第一条记录跳转到最后一条记录