ORM? SQLAlchemy? Comme il a déjà été résumé dans l'article Qiita suivant, omettez-le et seul le sujet principal https://qiita.com/tomo0/items/a762b1bc0f192a55eae8 https://qiita.com/ariku/items/75799665acd09520bed2
url = 'mysql+pymysql://%s:%s@%s:%s/%s?charset=%s' % (
self.user,
self.password,
self.host,
int(self.port),
self.db,
self.charset
)
self.engine = create_engine(url)
self.session = sessionmaker(bind=self.engine, autocommit=False, autoflush=True)()`
#Inclure la sous-requête dans la clause IN
rows = db.session.query(User).filter(
User.id.in_(
db.session.query(UserItem.user_id).filter(
UserItem.item_id == 1, UserItem.numbers > 10
)
)
).all()
Comme ci-dessous
SELECT * FROM users WHERE id IN (
SELECT user_id FROM user_items WHERE item_id = 1 AND numbers > 10
)
SQL Alchemy peut également exprimer un SQL complexe tel que SQL qui utilise des sous-requêtes dans la clause IN
En guise de mise en garde, dans ORM, le type de SQL émis dans les coulisses est une boîte noire, donc s'il s'agit d'un SQL subtil, ajoutez l'option suivante à create_engine
lors du débogage et de la sortie SQL Je vous recommande de le vérifier comme vous le faites
echo_option = 'DEBUG' in os.environ and os.environ['DEBUG'] == 'on'
self.engine = create_engine(url, echo=echo_option)
self.session = sessionmaker(bind=self.engine, autocommit=False, autoflush=True)()`