如何在数据库中存储字典/列表?

发布于 2024-08-22 15:28:55 字数 97 浏览 10 评论 0原文

如果我有一个充满嵌套内容的字典,如何将其作为字符串存储在数据库中?然后,当我准备好解析时将其转换回字典?

编辑:我只想将其转换为字符串......然后再转换回字典。

If I have a dictionary full of nested stuff, how do I store that in a database, as a string? and then, convert it back to a dictionary when I'm ready to parse?

Edit: I just want to convert it to a string...and then back to a dictionary.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

颜漓半夏 2024-08-29 15:28:55

选项:

1) Pickling

2) XML

3) JSON

其他我确定。它与可移植性对您的意义有很大关系。

Options:

1) Pickling

2) XML

3) JSON

others I am sure. It has a lot to do on how much portability means to you.

糖果控 2024-08-29 15:28:55

为什么不使用 pickle 模块中的一些序列化/反序列化?

http://docs.python.org/library/pickle.html

Why don't you use some serialization/deserialization from pickle module ?

http://docs.python.org/library/pickle.html

走过海棠暮 2024-08-29 15:28:55

最好,根据您指定的条件:

import cPickle
   ...
thestring = cPickle.dumps(thedict, -1)

-1 确保最有效的序列化并生成二进制 字符串(任意字节字符串)。如果您需要一个 ascii 字符串(因为例如将会发生一些 Unicode 转码,并且您无法将字段的类型从 TEXT 切换为 BLOB< /code>),避免使用 -1,但效率会降低。

无论哪种情况,要稍后从字符串中获取字典,

thenewdict = cPickle.loads(thestring)

Best, under your stated conditions:

import cPickle
   ...
thestring = cPickle.dumps(thedict, -1)

the -1 ensures the most efficient serialization and produces a binary string (arbitrary string of bytes). If you need an ascii string (because e.g. some Unicode transcoding is going to happen and you can't switch the field's type from, say, TEXT to BLOB), avoid the -1, but you'll then be less efficient.

To get the dict back later from the string, in either case,

thenewdict = cPickle.loads(thestring)
昵称有卵用 2024-08-29 15:28:55

有许多序列化方法,JSON 是可读的、相当紧凑的、本地支持的并且可移植的。我更喜欢它而不是 pickle,因为后者可以执行任意代码并可能引入安全漏洞,而且还因为它的可移植性。

根据数据的布局,您还可以使用 ORM 将数据直接映射到数据库结构中。

There are any number of serialization methods out there, JSON is readable, reasonably compact, supported natively, and portable. I prefer it over pickle, since the latter can execute arbitrary code and potentially introduce security holes, and because of its portability.

Depending on your data's layout, you may also be able to use your ORM to directly map the data into database constructs.

等风来 2024-08-29 15:28:55

您有两个选择

  • 使用标准序列化格式(json、xml、yaml...)

    • 优点:您可以使用任何可以解析这些格式的语言进行访问(在最坏的情况下,您可以编写自己的解析器)
    • 缺点:保存和加载数据可能会更慢(这主要取决于实现)
  • 使用 cPickle:

    • 优点:易于使用、快速且采用原生 Python 方式进行序列化。
    • 缺点:只有基于 Python 的应用程序才能访问数据。

You have two options

  • use a standard serialization format (json, xml, yaml, ...)

    • pros: you can access with a any language that can parse those formats (on the worst case you can write your own parser)
    • cons: could be slower to save and load the data (this depends of the implementation mostly)
  • use cPickle:

    • pros: easy to use, fast and native python way to do serialization.
    • cons: only python based apps can have access to the data.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文