@Daibend
Начинающий пайтон дэв.

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

Есть RAW SQL:

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 mytable) as cars_list)
CROSS JOIN
    (SELECT DISTINCT country from mytable) as country_list;


Суть в том, чтобы занести в бд декартово произведение новой записи с каждой страной или автомобилем. Потратил много времени, но у меня не получается, chatGPT не помог, постоянно делает ошибки, в гугле тоже нет прямого ответа.

Пример: в бд, в конкретной таблице есть записи с разными cars. например, audi, bmw, mersedes, hyundai. Необходимо создать 4 записи с вышеуказанными полями, где в каждой будет одно из значений - audi, bmw и др.

Хочу решить эту проблему собрав все записи уже на стороне бд, а не в памяти.
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 1
@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 данные, вы получите нарушение уникальности.
В целом смысл манипуляций мне не понятен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы