Dan*_*gal 2 python database sqlite sqlalchemy
我目前正在构建一个项目,其中我需要为每个用户保存一个字符串列表(他阅读的文章的网址)。
我正在使用 python + Flask + SQLalchemy 和 sqlite。
我知道 sqlite 不支持数组,所以我正在考虑切换到不同的数据库而不是支持数组的 sqlite。
我想知道你会做什么?哪个数据库支持数组或者是否有更好的方法解决它。
您可以通过某种方式将其序列化。一种选择是简单地调用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'>
Run Code Online (Sandbox Code Playgroud)
但正如 ggorlen 的链接所暗示的那样,您应该尝试提出比直接存储数组更好的选择。
MySQL 和 SQLlite 都支持 JSON 列。您可以将数组存储在 JSON 列中。就最佳实践和性能而言,将数组放入数据库当然是有争议的。
ORM
class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
list_of_items = Column(JSON, nullabled=False)
Run Code Online (Sandbox Code Playgroud)
将数组添加到数据库中。
parent_one = Parent(list_of_items=['item1', 'item2'])
session.add(parent_one)
session.commit()
Run Code Online (Sandbox Code Playgroud)
现在,当您获取parent_one的记录时,您将看到它的“list_of_items”列是python中的一个数组。
这也可以使用 SQL Alchemy 核心语言来完成。