标题说明了一切:我正在寻找保存在MySQL数据库中的Python [冻结]套的标准方法。
注: SET
MySQL的数据类型是不等价; 它是从限制列表对象更多的选择。
注(2):我发明的东西特设; 假设我是集包含没有逗号的字符串,我可以记录它作为字符串类型的存储逗号分隔的列表。 我在寻找的东西这是一个有点更通用,更规范。
注(3):我看了一下MySQL的参考网页。 我无法找到它。 我还在问,因为我不是与数据库,以便熟练了,我认为这可能是一个标准的方法存在。
标题说明了一切:我正在寻找保存在MySQL数据库中的Python [冻结]套的标准方法。
注: SET
MySQL的数据类型是不等价; 它是从限制列表对象更多的选择。
注(2):我发明的东西特设; 假设我是集包含没有逗号的字符串,我可以记录它作为字符串类型的存储逗号分隔的列表。 我在寻找的东西这是一个有点更通用,更规范。
注(3):我看了一下MySQL的参考网页。 我无法找到它。 我还在问,因为我不是与数据库,以便熟练了,我认为这可能是一个标准的方法存在。
正确的方法来实现在SQL一组将有两个额外的表:
CREATE TABLE set (
id int unsigned PRIMARY KEY AUTO_INCREMENT
);
CREATE TABLE set_member (
set_id int unsigned NOT NULL,
FOREIGN KEY (set_id) REFERENCES set(id),
member <whatever_type_your_set_is_of> NOT NULL,
UNIQUE (set_id, member)
);
(您可能能够避免set
表,如果你想存储集只有一个表,该表具有一个唯一的ID,你会只存储每个记录中的一组表)
因为它很可能是你不寻找一个合适的SQL方法(这是精actally, 如果你永远不会对那些集执行任何数据库操作,除了存储和检索),你可能会存储您的集单场规格化的,而不是下面推荐的做法在桌子上; 在这种情况下,没有提供原生的MySQL数据类型,它可以代表一个Python集,你会需要序列化你的集一varchar
或text
列。 它完全是由你来选择适合您需求的序列化格式。
这很容易:“我正在寻找保存在MySQL数据库中的Python [冻结]套的标准方式。”
这不是:“* SQL相当于Python的集合类型?”
该集类型确实比包含值-它允许一组操作与他们-最接近的方法是枚举类型- https://dev.mysql.com/doc/refman/5.0/en/enum.html -但你” d具有创建每组你想要一个枚举。
但是,如果你想要的是保持一个frozenset的值后来从Python来找回它,你可以很容易地泡椒序列化,并将其存储在SQL数据库中的BLOB:
import pickle
...
data = pickle.dumps(my_frozen_set)
cursor.execute(""" INSERT INTO mytable VALUES (%s,)""", (data,))