这是我们的第一个方案, 我们可以存储在数据库表中.
那么这里会出现一个问题, 就是类似于上例中requirement这样比较复杂的数据结构该如何存储呢?
当然,你会说, 这难不倒我, 我们可以使用序列化后的对象, 如python中的pickle来对对象 进行序列化,然后存储在表项中, 在读取时直接可以转换为对象来使用.
这种方案是没有问题的, 但是随之而来会有一个比较难处理的问题, 因为我们这里提到的静态数据 通常是已经设定好的数据, 而在运行时是不会更改的,那么我们就必须在初始化时要构建好这些数据. 所以,会面临着把这些初始化到数据库的操作.
为了达到这个目的,你可以选择sql语句, 或者django框架中的fixture等,但是逃不脱的是你需要手动输入 序列化好的对象.
例如, 对象 a = {"name":"zhutao", "gender" : "male"} 序列化后(pickle)的结果(记为b)为:(dp0
S'gender'
p1
S'male'
p2
sS'name'
p3
S'zhutao'
p4
s.
你会看到是一串人类无法容易识别的字符串, 那么我们手动输入就更加困难, 当然你可以,先把结构写好然后将序列化后 的字符串直接拷贝到sql中, 没有问题, 不过,相当麻烦. 想像下,如果我们后面要更改这个结构,我们需要:
更改数据结构=>将更改后的数据结构序列化=>将得到的序列化字符串拷贝到sql中
而更多的环节意味着更多的出错可能.
当然, 这样序列化后的数据也很容易转换为原始的对象, 例如:c = pickle.loads(b)
#这时c是a的一份完全的拷贝