如何将数组插入到我的金字塔应用程序的数据库表的列中?

时间:2013-02-04 17:44:30

标签: python sqlalchemy pyramid pickle

我正在尝试创建一个sql(sqlite)数据库,用户上传一个stl文件,数据(所有点,三角形等)都存储在数据库中,以便永久可用。是否可以使用只有两列的数据库(三个带键):name(url的标题)和data(数组数据)?

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

在阅读这个问题后,似乎酸洗是一个很好的方法:http://docs.python.org/2/library/pickle.html

我无法弄清楚如何实现这一点。我应该添加泡菜(数据)吗?

编辑:经过进一步审核,似乎酸洗引入了一些在使用JSON时不存在的安全漏洞。是否可以简单地调用jsondatastring=JSON.stringify(data)然后将其保存到数据库中?如果是这样,那么适当的列类型是什么?

1 个答案:

答案 0 :(得分:1)

如果您的目的只是将数组存储在数据库中并在Web应用程序代码中使用它,那么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