SQLAlchemy-Skalare und SchnittanomaliePython

Python-Programme
Guest
 SQLAlchemy-Skalare und Schnittanomalie

Post by Guest »

Das Handbuch SQLAlchemy heißt /> Der folgende Code zeigt zwei Beispiele, von denen eines ein ORM -Objekt zurückgibt, der andere jedoch nicht. Der erste verwendet eine Auswahlanweisung, die ein einzelnes ORM -Objekt auswählt. Das zweite Beispiel gibt kein ORM -Objekt zurück. Es ist identisch, mit Ausnahme der Einführung der intersect () -Funktion von Sqlalchemy. Es gibt nur die erste Spalte des gewünschten Objekts zurück. Gibt es eine elegantere Lösung? < /P>
from sqlalchemy import create_engine, select, intersect
from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase, Session

class Base(DeclarativeBase):
pass

class Movie(Base):
__tablename__ = "movie"

title: Mapped[str]
id: Mapped[int] = mapped_column(primary_key=True)

def __repr__(self):
return (
f"{self.__class__.__qualname__}("
f"title={self.title!r}, "
f"id={self.id!r})"
)

engine = create_engine("sqlite+pysqlite:///:memory:")
Base.metadata.create_all(engine)
with Session(engine) as session:
movie_1 = Movie(title="Great Movie 1")
movie_2 = Movie(title="Great Movie 2")
session.add_all((movie_1, movie_2))

statement = select(Movie).where(Movie.title == "Great Movie 1")
print("\n", statement)
result = session.scalars(statement).all()
print(f"{result=}")

stmt_isec = intersect(statement)
# In case you're wondering, the next line has the same effect as
# the unary intersect.
# stmt_isec = intersect(*[statement, statement])
print("\n", stmt_isec)
result = session.scalars(stmt_isec).all()
print(f"{result=}")
< /code>
Ausgabe: < /p>
SELECT movie.title, movie.id
FROM movie
WHERE movie.title = :title_1
result=[Movie(title='Great Movie 1', id=1)]

SELECT movie.title, movie.id
FROM movie
WHERE movie.title = :title_1 INTERSECT SELECT movie.title, movie.id
FROM movie
WHERE movie.title = :title_1
result=['Great Movie 1']
< /code>
Anwendungsfall < /h3>
Betrachten Sie eine Fünf-Säulen-Tabelle. Der Endbenutzer erhält ein Suchformular mit fünf Feldern für die Eingabe von Suchkriterien für jede der fünf Spalten. Der Benutzer gibt Suchkriterien für Fields 1 und Four ein, in denen alle Datensätze, die mit diesen Kriterien übereinstimmen, zurückgegeben werden. Das Problem ist, dass es bei fünf Spalten 120 (5 Faktorien) verschiedene Aussagen gibt, die erforderlich wären. < /P>
Die Lösung besteht darin Suche des Benutzers. Diese werden dann durch die SQLalchemy -Schnittfunktion kombiniert. Diese beiden werden zu Argumenten für die Schnittfunktion.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post