• Как правильно сформировать Query Builder код в SQLALCHEMY?

    @Olteya
    Совершенно непонятно, что вы хотите этим получить.
    Ошибки в вашем запросе:
    1) лишняя скобка после "as cars_list"
    2) SELECT DISTINCT car from mytable - что это за mytable? это та же таблица my_table с ошибкой?
    Если да, то запрос должен выглядеть так:
    INSERT INTO my_table(id, username, country, age, is_car_owner, car)
    SELECT
        15 as id,
        'daniel' as username,
        country_list.country,
        18 as age,
        True as is_car_owner,
        cars_list.car
    FROM
        (SELECT DISTINCT car from my_table) as cars_list
    CROSS JOIN
        (SELECT DISTINCT country from my_table) as country_list;

    4) Проверяйте, работает ли у вас SELECT (без INSERT).
    3) Если SELECT работает, а INSERT нет, смотрите, какой PK у вашей таблицы my_table? Возможно, пытаясь вставить полученные в SELECT данные, вы получите нарушение уникальности.
    В целом смысл манипуляций мне не понятен.
    Ответ написан
    Комментировать
  • Перенос данных блоками Excel из строчного вида в столбик?

    @Olteya
    Если взялись переделывать, предложу подумать над сменой структуры.
    Сделать простую таблицу со столбцами:
    Год, Месяц, Статья прихода/расхода (это ваши Пенсия/ЕДВ/Продукты и т.д.), Тип (Приход/Расход) (либо просто указывать операции расхода с минусом).
    Имея данные в таком виде ими можно управлять. Фильтровать, сортировать, считать суммы за месяц/год, строить графики.
    Если захочется добавить новую статью расхода- это не сломает таблицу. Одним словом данные будут более гибкие и управляемые.
    Ответ написан
    Комментировать
  • Как найти общие поля в таблицах?

    @Olteya
    Фактически задача сводится к поиску количества совпадений значений каждого атрибута таблицы А со значениями каждого атрибута таблицы Б.

    Можно попробовать используя метаданные построить список запросов вида:
    select
    (select count(*) from A where A.column_name1 in (select B.column_name1 from B )) as column_name1_x_column_name1,
    (select count(*) from A where A.column_name1 in (select B.column_name2 from B )) as column_name1_x_column_name2 и т.д.


    Пример для postgres:
    with B as
    (
    select table_name, column_name, data_type from information_schema.columns c where c.table_name in ('product') --название таблицы А
    )
    , common as (
    select A.table_name A_table_name, A.column_name A_column_name,
    	B.table_name B_table_name, B.column_name B_column_name from information_schema.columns as A
    inner join  B on  A.data_type = B.data_type
    where A.table_name in ('printer') --название таблицы Б
    )
    
    select '(select count(*) from ' || common.A_table_name || ' where ' || common.A_column_name || ' in (select '|| B_column_name || ' from ' || B_table_name || ' )) as ' || A_column_name || '_x_' || B_column_name || ',' from common

    Вариант соединения для примера сделан по типам данных.
    Далее оборачиваете еще в один select и выполняете.
    Получается что-то вроде:
    65ccf2ae8fa9e028148349.jpeg где видно количество совпадений.
    Результат, конечно, не означает, что по этим полям можно соединять таблицы. Это могут быть ссылки на таблицу С, например. Или совпадающие даты. Дальше нужно анализировать.
    Если правильно понимаю, у автора таблицы с большим количеством столбцов без описания. Так можно хотя бы сузить диапазон поиска.
    Ответ написан
    Комментировать