Добавление, удаление и сравнение значений столбца с помощью Python SQLAlchemy - PullRequest
1 голос
/ 18 июня 2020

Сообщество SQLAlchemy, новичок в базе данных и, в частности, sqlalchemy ищет здесь вашей помощи. Как и следовало ожидать, моя база данных состоит из строк и столбцов. Каждая строка - это информация об одном уникальном человеке. У каждого человека есть несколько столбцов (дата рождения, имя, фамилия, предыдущие даты входа в систему и т. Д. c.) Для одного из этих столбцов (даты предыдущих входов в систему) я хотел бы сохранить несколько значений внутри одного ячейка. Другими словами, я хотел бы иметь возможность хранить последние, скажем, десять дат входа в систему и иметь возможность манипулировать этими датами так же, как манипулировать списком в python. Я хотел бы иметь возможность добавлять новые даты входа в эту ячейку, удалять элементы из ячейки и доступ специфицированный c индекс ячейка. В основном моя ячейка хотела бы что-то вроде этого

{"04042020","04052020","04072020"}

И моя база данных будет выглядеть так

Name    |   Last Name | Last Log in dates
------------------------------------------------------------
Edgar   |   Allen     |  {"04042020","04052020","04072020"}
Dimitri |  Albertini  |  {"12042019","10112019","01072020"}

Я знаю, что sqlalchemy имеет способ включать ARRAY с

from sqlalchemy.dialects.postgresql import ARRAY 

После некоторых усилий я просто смог создать ARRAY и НЕ смог придумать способ манипулировать (добавлять, удалять, обращаться) к массиву. Вот простой прототип, который создает таблицу только с одним столбцом, а элемент в первой строке равен {1,2,3}.

from sqlalchemy import create_engine
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.dialects.postgresql import ARRAY

engine = create_engine('postgresql://rouzbeh:tiger@localhost/newtable')
metadata = MetaData()
newtable = Table("newtable", metadata,
        Column("data", ARRAY(Integer))
    )
metadata.create_all(engine)
connection = engine.connect()
connection.execute(newtable.insert(),data=[1,2,3])

Вывод в Postgress postico выглядит как на следующем снимке экрана. Еще раз повторю, я хотел бы иметь доступ к элементам ({1,2,3}) и управлять ими, удаляя или добавляя к ним элементы. ({1,2,3,4}) или ({1,2})

enter image description here

1 Ответ

1 голос
/ 18 июня 2020

Для аналогичного варианта использования я храню такие данные как JSON. Посмотрите этот пост SO . Идея состоит в том, чтобы выгрузить JSON как ТЕКСТ (или объект JSON, если ваша база данных поддерживает это).

Для более сложных структур я использую Marshmallow . Это особенно полезно с вложенными структурами.

Однако, этот подход является спорным . См. этот пост SO и в этом обсуждении Quora . Если вы можете жить с недостатками, это простой способ хранить данные.

...