如何将数组插入数据库表的列中以供我的金字塔应用使用?
我正在尝试创建一个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