当前位置: 首页 > 知识库问答 >
问题:

使用SQLalchemy将数组存储在数据库中

郁灿
2023-03-14

我目前正在构建一个项目,其中我需要为每个用户保存一个字符串列表(他阅读的文章的网址)。

我正在使用带有sqlite的python烧瓶SQLalchemy。

我知道sqlite不支持数组,所以我正在考虑切换到另一个数据库,而不是sqlite,一个支持数组的数据库。

我想知道你会怎么做?哪个数据库支持数组,或者是否有更好的解决方法。

共有2个答案

淳于涛
2023-03-14

MySQL和SQLlite都支持JSON列。可以将数组存储在JSON列中。就最佳实践和性能而言,将阵列放入数据库当然是有争议的。

ORM公司

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    list_of_items = Column(JSON, nullabled=False)

将数组添加到您的数据库。

parent_one = Parent(list_of_items=['item1', 'item2'])
session.add(parent_one)
session.commit()

现在,当您获取parent\u one的记录时,您将看到它的“list\u of\u items”列是python中的一个数组。

这也可以通过SQL alchemy核心语言完成。

王宏深
2023-03-14

您可以以某种方式序列化它。一种选择是简单地使用数组调用str,然后在需要将其转换回来时以某种方式处理它。

另一个选项是使用json模块:

import json


lst = [1,2,3]

serialized = json.dumps(lst)
print(serialized)                           # '[1, 2, 3]'
print(type(serialized))                     # <class 'str'>

deserialized = json.loads(serialized)
print(deserialized)                         # [1, 2, 3]
print(type(deserialized))                   # <class 'list'>

但正如ggorlen的链接所示,您应该尝试想出一个比直接存储阵列更好的选择。

 类似资料:
  • 我创建了一个TextView,它以多行显示值 ,我希望将该值保留在SQLite数据库中。这是我使用的代码: 问题是当我保存值时,整个值被插入到一个单元格中。我希望每行的值分开,然后插入到每行的单个单元格中,尽管我使用扫描器方法插入数据,但它不起作用。那有什么办法吗?

  • 问题内容: 我正在开发一个PHP应用程序,该程序需要将各种设置存储在数据库中。客户经常询问是否可以添加或更改/删除某些内容,这已导致表格设计出现问题。基本上,我有很多布尔字段,它们仅指示是否为特定记录启用了各种设置。 为了避免使表格混乱,我考虑将数据存储为序列化数组。我已经读过,这被认为是不好的做法,但是我认为这是使用这种方法的合理案例。 有什么真正的理由避免这样做吗? 任何建议表示赞赏。 谢谢。

  • 问题内容: 在MySQL数据库中用PHP存储IP的最佳实践是什么?有一个名为ip2long的函数-但这仅适用于IPv4。但是IPv6呢? 我知道一个用于IPv6 IP的php函数,但是在Windows上的PHP <Version 5.3上不起作用 问题答案: 可以将点分十进制IPv4地址转换为整数,最大大小为32位。IPv6地址是128位。由于128位不适合PHP int,因此在PHP中使用它会很

  • 我有一个通过ORM保存到数据库的对象。对象有一个字符串数组,每个对象的数组长度可以不同。我想知道在db中存储字符串数组的标准做法(例如,我是否应该将所有字符串存储在一个字段中作为csv等)?

  • 问题内容: 我想保存额外的信息,然后再将总订单发送到Paypal。对于每一项,我都在MySQL数据库中创建了一个要存储的列。现在,我正在考虑将其保存为一个数组,以后可以在创建PHP页面时阅读。多余的字段取自输入表单字段。 通过使用数组,可以确保不混淆信息吗? 问题答案: 您可以使用/ 存储数组。使用该解决方案,它们不能轻易地从其他编程语言中使用,因此您可以考虑使用/ 代替(它为您提供了广泛支持的格

  • 问题内容: 我正在尝试将sql数据库中的数据存储到数组中。目前我有这个: 问题是我有8行数据。我需要将数据库中的每个8个名称存储到一个数组中。当我尝试这个: 它不起作用。 问题答案: 您想要的是: 这会将所有8个名称存储在类似于以下内容的数组中: