首页 > 解决方案 > python中的子查询sqlalchemy

问题描述

PycharmProjects\pythonProject\programowanie_bazy_sda.py:1059:SAWarning:将子查询对象强制转换为 select() 以便在 IN() 中使用;请明确传递一个 select() 构造 session.query(Directors).filter(Directors.director_id.in_(subq)).update({'rating': (Directors.rating + 1)}, synchronize_session='fetch')

from sqlalchemy import and_, between, or_, join, select, ForeignKey, func, text from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine, Column, String, Integer from sqlalchemy.orm import sessionmaker, relationship

con = create_engine('mysql://root:xxxxxx@localhost:3306/cinematic') base = declarative_base()

类董事(基础):

__tablename__ = 'directors'

director_id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(30), nullable=False)
surname = Column(String(30), nullable=False)
rating = Column(Integer, nullable=False)
movies = relationship('Movies', back_populates='director')

类电影(基础): 表名='电影'

movie_id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(30), nullable=False)
year = Column(Integer, nullable=False)
category = Column(String(30), nullable=False)
director_id = Column(Integer, ForeignKey('directors.director_id'), nullable=False)
rating = Column(Integer, nullable=False)
director = relationship('Directors', back_populates='movies')

会话 = sessionmaker(bind=con) 会话 = 会话()

subq = session.query(Movies.director_id).filter(and_(Movies.year < 2001, Movies.title.like('T%'))).subquery()

session.query(Directors).filter(Directors.director_id.in_(subq)).update({'rating': (Directors.rating + 1)}, synchronize_session='fetch')

标签: sqlalchemy

解决方案


推荐阅读