ORM? SQLAlchemy? Da es bereits im folgenden Qiita-Artikel zusammengefasst wurde, lassen Sie es weg und nur das Hauptthema 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)()`
#Unterabfrage in IN-Klausel aufnehmen
rows = db.session.query(User).filter(
User.id.in_(
db.session.query(UserItem.user_id).filter(
UserItem.item_id == 1, UserItem.numbers > 10
)
)
).all()
Wie unten
SELECT * FROM users WHERE id IN (
SELECT user_id FROM user_items WHERE item_id = 1 AND numbers > 10
)
SQL Alchemy kann auch komplexes SQL ausdrücken, z. B. SQL, das Unterabfragen in der IN-Klausel verwendet
Als Einschränkung wird in ORM hinter den Kulissen eine Blackbox ausgegeben. Wenn es sich also um eine subtile SQL handelt, fügen Sie beim Debuggen und Ausgeben von SQL die folgende Option unter "create_engine" hinzu Ich empfehle Ihnen, es zu überprüfen
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)()`
Recommended Posts