Существует ли эквивалент MySQL для типа набора Python?

В названии говорится все: я ищу стандартный способ сохранения Python [замороженных] наборов в базе данных MySQL.

Примечание: тип данных SET MySql не эквивалентен; это скорее множественный выбор из ограниченного объекта списка.

Примечание (2): Я могу изобрести что-то ad-hoc; предполагая, что мой набор имеет строки, которые не содержат запятых, я могу записать его как отсортированный список строк, разделенных запятыми. Я ищу что-то более общее и более стандартное.

Примечание (3): Я просмотрел справочные веб-страницы MySQL. Я не мог найти его там. Я все еще спрашиваю, поскольку я недостаточно разбираюсь в базах данных, и я думаю, что существует стандартный метод.

2 Solutions collect form web for “Существует ли эквивалент MySQL для типа набора Python?”

Правильный способ реализации набора в 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 таблицы, если вы хотите хранить наборы только в одной таблице, и эта таблица имеет уникальный идентификатор, и вы сохраните только один набор для каждой записи в таблице)

Поскольку очень вероятно, что вы не ищите подходящего SQL-подхода (что очень хорошо, если вы никогда не собираетесь выполнять какие-либо операции с базой данных на этих наборах, помимо хранения и поиска), скорее всего, вы сохраните свой установить денормализованную в одном поле таблицы, а не следовать рекомендациям; в этом случае нет собственного типа данных MySQL, который может представлять набор Python, и вам потребуется сериализовать ваш набор в столбце varchar или text . Вы можете выбрать формат сериализации, соответствующий вашим потребностям.

Это легко: «Я ищу стандартный способ сохранения Python [замороженных] наборов в базе данных MySQL».

Это не так: «* SQL эквивалентно типу набора Python?»

Тип набора больше, чем содержит значения – он позволяет устанавливать операции с ними – самым близким подходом будет тип ENUM – https://dev.mysql.com/doc/refman/5.0/en/enum.html – d необходимо создать перечисление для каждого набора, который вы хотите.

Тем не менее, если вы хотите сохранить значения frozenset, чтобы получить его позже с Python, вы можете легко сериализовать его с помощью Pickle и сохранить его как BLOB в базе данных SQL:

 import pickle ... data = pickle.dumps(my_frozen_set) cursor.execute(""" INSERT INTO mytable VALUES (%s,)""", (data,)) 
  • Как получить значение столбца результата SQL с использованием имени столбца в Python?
  • Получение ввода из формы HTML и сохранение его в mysql через Flask
  • Поддерживает ли Python MySQL подготовленные заявления?
  • Как вы используете модуль Python Msqldb? вместо% s для параметров запроса?
  • Будет ли этот SQL вызвать какие-либо проблемы?
  • получить необработанное десятичное значение из запроса mysqldb
  • Невозможно заставить MySQL-исходный запрос работать с использованием модуля mysqldb Python
  • Python, конвертировать 9 кортежей UTC в формат MySQL datetime
  • Python - лучший язык программирования в мире.