Тип массива в SQlite - PullRequest
       4

Тип массива в SQlite

0 голосов
/ 26 апреля 2020

Я занимаюсь разработкой небольшого сайта в Python. Я пользуюсь flask и venv. Сейчас я нахожусь в процессе написания базы данных, и вот одна из моих таблиц:

class Message(db.Model):
    message_id = db.Column(db.Integer, primary_key=True)
    session_id = db.Column(db.String(30), unique=True)
    application_id = db.Column(db.Integer)
    participants = db.Column(db.Array())
    content = db.Column(db.String(200))

Проблема в строке 5: «Массив». Нет такого типа переменной.

Я хочу создать список получателей сообщения. Существует ли тип переменной Array или List в SQlite?

Если да, то как и как он используется?

И если нет, то как я могу в любом случае составить список получателей?

Кто-нибудь знает?

Большое спасибо!

1 Ответ

1 голос
/ 26 апреля 2020

SQLite не поддерживает массивы напрямую. Это только делает Ints, Floats и Text. Смотрите здесь тип, который он поддерживает.

Чтобы выполнить sh то, что вам нужно, вы должны использовать пользовательскую кодировку или использовать FK, то есть создать другую таблицу, где каждый элемент в массиве хранится в виде строки. На мой взгляд, это будет утомительно.

Кроме того, это можно сделать в SQLAlchemy, и вам захочется взглянуть на PickleType :

array = db.Column(db.PickleType(mutable=True))

Пожалуйста обратите внимание, что вам придется использовать параметр mutable=True, чтобы иметь возможность редактировать столбец. SQLAlchemy обнаружит изменения автоматически, и они будут сохранены, как только вы их подтвердите.

Кроме того, обратите внимание на ScalarListType в SQLAlchemy для сохранения нескольких значений в столбце.

Обновление:

В SqlAlchemy Вы можете использовать столбец массива .

Например:

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...