Есть ли способ использовать набор Python в качестве типа данных для столбца SQLAlchemy?

#python #mysql #sqlalchemy #set

#python #mysql #sqlalchemy #набор

Вопрос:

Как я могу ограничить значения столбца в базе данных MySQL одним или несколькими элементами предварительно указанного набора, используя SQLAlchemy? (В идеале, я хочу способ использовать SET тип данных MySQL.)

Пример

Контекст

У меня есть эксперимент, включающий проведение измерений у многих людей в течение нескольких дней. Многие участники участвовали в эксперименте после его начала (поэтому данные за первые несколько дней отсутствуют), а иногда отдельные участники выпадают (данные за последние несколько дней отсутствуют). Также возможно, что у некоторых пользователей отсутствуют измерения в середине эксперимента.

Я хочу создать таблицу, в которой хранится некоторая информация о каждом человеке и перечислены дни, в которые были проведены их измерения.

Код

Я надеялся, что сработает что-то вроде следующего, поскольку примерно так SQLAlchemy поддерживает Enum s.

 import sqlalchemy as sql
experiment_days = {'day_1', 'day_2', 'day_3'}
sql.Column('days_measured', experiment_days)
  

К сожалению, я получаю это сообщение об ошибке:

 AttributeError: 'set' object has no attribute '_set_parent_with_dispatch'
  

Я ожидал получить a Column с типом данных SET, который может принимать значения day_1 , day_1,day2 , day_1,day_3 и т.д.

Ответ №1:

SET Тип данных MySQL поддерживается диалектом MySQL:

 from sqlalchemy.dialects import mysql

class MyTable(Base):

    ...

    myset = Column(mysql.SET('day_1', 'day_2', 'day_3'), ...)