Очередной нытья пост
Oct. 8th, 2023 07:22 pmВот работал ты до прошлых лет с powershell. Все есть объект, а что не объект - то массив объектов или еще какая сложносочиненная дрянь. Ну, ок.
А теперь берем postgre. В нем можно объявить тип объекта - массив,
textfield4_arrtextD4 text ARRAY,
textfield5_arrnumsE5 integer ARRAY
Как бы ничего особенного, ну массив.
Но нихера. Вот взял ты psycopg2 (отдельно надо ставить, замечу), сделал fetchall() и получил - просто длинную строку. Внутри которой может быть массив. А может и не быть. И дальше как знаете.
https://www.datacamp.com/tutorial/tutorial-postgresql-python
Прямо в том же тексте говорят про https://www.sqlalchemy.org/
и не говорят про pandas https://pandas.pydata.org/docs/reference/api/pandas.read_sql.html
https://datagy.io/pandas-read-sql/
https://stackoverflow.com/questions/37235512/pandas-parsing-converting-a-column-as-date-after-importing-from-read-sql
https://sparkbyexamples.com/pandas/pandas-read-sql-query-or-table/
А вроде и ничего такой этот пандас.
UPD
print(type()) # окей, class 'list'
print(len()) # окей длина
print(type(Чототам[0])) # Она оно чо - class 'tuple' а не str или List
Кортежи (tuple) в Python – это те же списки за одним исключением. Кортежи неизменяемые структуры данных.
БЛДЖ. А оно таки список, то есть кортеж. БЛДЖ. Два дня ныл, 5 минут посмотрел на тип
А теперь берем postgre. В нем можно объявить тип объекта - массив,
textfield4_arrtextD4 text ARRAY,
textfield5_arrnumsE5 integer ARRAY
Как бы ничего особенного, ну массив.
Но нихера. Вот взял ты psycopg2 (отдельно надо ставить, замечу), сделал fetchall() и получил - просто длинную строку. Внутри которой может быть массив. А может и не быть. И дальше как знаете.
https://www.datacamp.com/tutorial/tutorial-postgresql-python
Прямо в том же тексте говорят про https://www.sqlalchemy.org/
и не говорят про pandas https://pandas.pydata.org/docs/reference/api/pandas.read_sql.html
https://datagy.io/pandas-read-sql/
https://stackoverflow.com/questions/37235512/pandas-parsing-converting-a-column-as-date-after-importing-from-read-sql
https://sparkbyexamples.com/pandas/pandas-read-sql-query-or-table/
А вроде и ничего такой этот пандас.
UPD
print(type()) # окей, class 'list'
print(len()) # окей длина
print(type(Чототам[0])) # Она оно чо - class 'tuple' а не str или List
Кортежи (tuple) в Python – это те же списки за одним исключением. Кортежи неизменяемые структуры данных.
БЛДЖ. А оно таки список, то есть кортеж. БЛДЖ. Два дня ныл, 5 минут посмотрел на тип
no subject
Date: 2023-10-08 01:49 pm (UTC)У постгреса типы есть - ну какие есть, других Момжиан не завез. Можешь похоливарить про разницу между JSON и JSONB. Но самое главное - таблицы в постгресе жестко типизированные.
psycopg2 дает тебе сериализированное представление. Которое, как считается, ты дальше сам раскроешь, потому что знаешь модель данных. "А если не знаю" - не вариант, ты это, скажи, что не знаешь, что у тебя в typedef struct написано, какие там поля каких типов.
Если ты не хочешь десериализовать ручками, тебе нужен ORM. По поводу ORM сломано много копий - идеальный ORM принципиально невозможно, потому что 3НФ базы ни фига не ложится на объектную модель. Поэтому берешь какой-то и юзаешь как-то. Если у тебя простая модель данных, тебе, примерно, поровну.
Дальше применительно к sqlalchemy у тебя есть два варианта.
1. Ты используешь его на низком уровне, по сути, для параметризации кверей (которые ты по факту руками пишешь) и для сериализации-десериализации.
2. Ты можешь его использовать на высоком уровне, по сути, чтобы работать с базой почти как с массивом объектов. Это в чем-то прельстивее (сам так не делал), но если абстракция в (1) течет достаточно редко, то здесь шансы повыше будут.
Только вот скажи мне, минхерц, а зачем тебе массив в постгресе? Обычно в простых задачах он особо не нужен. Не хочешь ли ты модель данных к 3НФ сначала привести?
no subject
Date: 2023-10-08 01:55 pm (UTC)третья нормальная форма (ЗНФ). Какой пидор придумал писать это как 3НФ, а не 3-НФ, потому что я читаю это как ЗеНФ и думаю - какая еще зе. А все потому что это калька с английского Third normal form (3NF) - где нет буквы Зе, такой же как цифра 3.
>> а зачем тебе массив в постгресе?
-
У меня есть поле "ссылка раз, ссылка два" - не держать же под каждую отдельное поле.
>>psycopg2 дает тебе сериализированное представление. Которое, как считается, ты дальше сам раскроешь, потому что знаешь модель данных.
-
Для этого надо СНАЧАЛА написать делитель по запятым, ПОТОМ получить ошибку "тип у вас не той системы", погуглить и только потом сделать print(type и увидеть tuple. Дописал в пост.
Все проще оказалось, кортеж \ tuple я уж как-то распилю в объект класса
no subject
Date: 2023-10-08 02:42 pm (UTC)Хотя в данном конкретном случае денормализация может быть оправдана, если ссылки тебе важны только и исключительно как параметры объекта и за его пределами никаких запросов ты делать не будешь.
no subject
Date: 2023-10-08 02:43 pm (UTC)