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

Ссылка скопирована
1 ответ

Есть 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;

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 и др.

Хочу решить эту проблему собрав все записи уже на стороне бд, а не в памяти.

Дополнительно:

при чём тут тег FastAPI?

  • Потратил много времени, но у меня не получается, chatGPT не помог, постоянно делает ошибки, в гугле тоже нет прямого ответа

    Показывайте, что пробовали и где именно ошибки.

  • Ответы:

    Совершенно непонятно, что вы хотите этим получить.
    Ошибки в вашем запросе:
    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;

    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 данные, вы получите нарушение уникальности.
    В целом смысл манипуляций мне не понятен.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Мария Код Ответ

    Для правильного формирования Query Builder кода в SQLALCHEMY, необходимо следовать определенным шагам и правилам. SQLALCHEMY - это популярный инструмент для работы с базами данных в языке Python, который облегчает выполнение запросов к базе данных.

    1. Импорт необходимых модулей:
    Для начала работы с SQLALCHEMY необходимо импортировать необходимые модули. Обычно это делается следующим образом:

    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String

    from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String

    2. Создание модели данных:
    Определите модель данных, которая будет соответствовать вашей таблице в базе данных. Например, если у вас есть таблица "users", то модель данных может выглядеть следующим образом:

    Base = declarative_base()
     
    class User(Base):
        __tablename__ = 'users'
     
        id = Column(Integer, primary_key=True)
        name = Column(String)
        age = Column(Integer)

    Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer)

    3. Создание объекта сессии:
    Для выполнения запросов к базе данных необходимо создать объект сессии:

    engine = create_engine('sqlite:///example.db', echo=True) # замените на свой путь к базе данных
    Session = sessionmaker(bind=engine)
    session = Session()

    engine = create_engine('sqlite:///example.db', echo=True) # замените на свой путь к базе данных Session = sessionmaker(bind=engine) session = Session()

    4. Формирование запроса с использованием Query Builder:
    Теперь, когда у вас есть модель данных и объект сессии, вы можете использовать Query Builder для формирования запросов к базе данных. Например, чтобы выбрать всех пользователей старше 18 лет, можно использовать следующий код:

    users = session.query(User).filter(User.age > 18).all()
    for user in users:
        print(user.name)

    users = session.query(User).filter(User.age > 18).all() for user in users: print(user.name)

    Это лишь простой пример использования Query Builder в SQLALCHEMY. В зависимости от вашего запроса, вам могут потребоваться дополнительные методы и операторы. Важно помнить, что использование Query Builder позволяет избежать проблем с безопасностью и сделать ваш код более читаемым и удобным для поддержки.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно