当前位置:  开发笔记 > 编程语言 > 正文

是否可以将值列表保存到SQLite列中?

如何解决《是否可以将值列表保存到SQLite列中?》经验,为你挑选了2个好方法。

我希望3列有9个不同的值,比如Python中的列表.可能吗?如果不是在SQLite中,那么在另一个数据库引擎上?



1> Alex Martell..:

您必须通过您最喜欢的方式将列表(或其他Python对象)序列化为一串字节,即"BLOB";-),(如果您想要一个非常通用的marshal数字或字符串和c等基本值的列表是有用的)cPickle解决方案等),并在您获取它时反序列化它.当然,这基本上将列表(或其他Python对象)作为被动"有效载荷" - 不能在WHERE子句中有意义地使用它ORDER BY等.

关系数据库只是不能很好地处理非原子值,并且更喜欢其他标准化备选方案(将列表的项目存储在包含"listID"列的不同表中,将"listID"放在主表中,等等).非关系数据库,虽然它们通常具有相关性的限制(例如,没有连接),但可以为您的需求提供更直接的支持.

某些关系数据库确实具有非关系扩展.例如,PostGreSQL支持一种数组数据类型(不像Python的列表那么通用--PgSQL的数组本质上是同类的).



2> Ned Batcheld..:

通常,您可以通过对列表进行字符串化(使用repr()),然后保存字符串来完成此操作.在从数据库中读取字符串时,使用eval()重新创建列表.请注意,尽管您确定没有用户生成的数据可以进入该列,或者eval()存在安全风险.


为了将来参考,请不要这样做。Python的标准库包括[ast.literal_eval()](https://docs.python.org/2/library/ast.html#ast.literal_eval),可以安全地执行完全相同的操作。
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有