如何将数组插入数据库表的列中以供我的金字塔应用使用?

0 投票
1 回答
2653 浏览
提问于 2025-04-17 14:43

我正在尝试创建一个sql(sqlite)数据库,用户可以上传一个stl文件,然后把所有的数据(比如点、三角形等)存储在数据库里,这样就能永久保存。请问,能不能只用两个列(加上一个主键,总共三个列)来实现:一个是名字(网址的标题),另一个是数据(数组数据)?

这个数据数组的格式是:[[[x1,y1,z1],....],[[v1,v2,v3],...]]。首先给出所有的点,然后通过这些点的顺序来定义三角形。这个数组能存储在数据库里吗?如果可以,应该用什么数据类型(整数、字符串等)?

在深入研究这个问题后,我发现使用pickle可能是个不错的选择:http://docs.python.org/2/library/pickle.html

我在实现这个过程中遇到了一些困难。我是不是应该直接用pickle(data)?

编辑:经过进一步审查,发现使用pickle可能会引入一些安全问题,而使用JSON就没有这些问题。那我能不能直接调用jsondatastring=JSON.stringify(data),然后把它保存到数据库里?如果可以的话,合适的列类型应该是什么?

1 个回答

1

如果你只是想把数组存储到数据库里,并在你的网页应用代码中使用它,SQLAlchemy的 PickleType 是个不错的选择。你不需要担心序列化和反序列化的过程,这些都会自动为你处理:

from sqlalchemy.types import PickleType

class Foo(Base):
    __tablename__ = 'foo'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    array = Column(PickleType)

foo = Foo(name=u'bar', array=[1, 2, 3])
session.add(foo)
session.commit()

foo = session.query(Foo).filter_by(name=u'bar').one()
print foo.array

撰写回答