Какой тип столбца поддерживает списки в sqlalchemy? - PullRequest
0 голосов
/ 13 ноября 2018

В настоящее время я настраиваю базу данных для солнечных активных регионов, и один из столбцов должен получить номер региона, который на данный момент я объявил следующим образом:

noaa_number = sql.Column(sql.Integer, nullable=True)

Однако, поскольку новый номер может быть назначен по мере развития региона, какой тип столбца будет лучше поддерживать список, чтобы сохранить все числа, которые заданы данной области?Поэтому вместо записи типа:

noaa_number = 12443

мой результат может храниться как:

#a simple entry
noaa_number = [12443]
#or multiple results
noaa_number = [12444,12445]

Где эти элементы в списке будут целыми числами.

Я проверял документацию , и лучшей идеей было поместить этот столбец в строку и разобрать все числа из него.Хотя это сработало бы отлично, мне было интересно, есть ли лучший и более подходящий способ сделать это.

1 Ответ

0 голосов
/ 15 ноября 2018

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

class Example(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    my_array = db.Column(db.ARRAY(db.Integer())

# You can easily find records:
# Example.my_array.contains([1, 2, 3]).all()
# You can use text items of array
# db.Column(db.ARRAY(db.Text())

Также вы можете использовать CompositeArray ( sqlalchemy_utils ) для использования пользовательских типов базы данных в качестве элементов массива.Пример:

# let's imagine that we have some meta history
history = db.Column(
        CompositeArray(
            CompositeType(
                'history',
                [
                    db.Column('message', db.Text),
                ]
             )
        )
# example of history type:
CREATE TYPE history AS (
   message text
);

Примечание!Не уверен насчет sqlite , но с postgres должен работать нормально.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...