Heim  >  Artikel  >  Backend-Entwicklung  >  SQLAlchemy-Tipps zur Python-Webentwicklung

SQLAlchemy-Tipps zur Python-Webentwicklung

PHPz
PHPzOriginal
2023-06-17 12:03:111622Durchsuche

Mit der kontinuierlichen Weiterentwicklung der Internettechnologie wird die Python-Webentwicklung online immer beliebter. SQLAlchemy ist eines der beliebtesten ORM-Frameworks (Object-Relational Mapping) in Python. Die effiziente und einfache Datenbankbetriebsmethode realisiert nicht nur die nahtlose Verbindung zwischen Python-Webentwicklung und Datenbank, sondern wird auch von vielen Entwicklern bevorzugt. In diesem Artikel werden einige SQLAlchemy-Tipps zur Python-Webentwicklung gegeben, um Entwicklern dabei zu helfen, die Projektentwicklung effizienter abzuschließen.

1. Verwenden Sie contextlib, um den Abschluss der Sitzung sicherzustellen.

ORM-Frameworks enthalten im Allgemeinen ein Sitzungsobjekt. Wenn ein Entwickler mit der Datenbank interagieren muss, wird ein Sitzungsobjekt erstellt und betrieben. Das Sitzungsobjekt muss jedoch nach Abschluss des Vorgangs geschlossen werden, da sonst unerwartete Probleme auftreten.

Um die Verwaltung von Sitzungsobjekten sicherzustellen, kann Python die Kontextmethode contextlib verwenden, um Systemeigenschaften vorübergehend zu ändern. Durch die Verwendung von contextlib kann sichergestellt werden, dass die Sitzung geschlossen wird und gleichzeitig eine übermäßig umständliche Try/Except-Verarbeitung vermieden wird. Der Code lautet wie folgt:

from contextlib import contextmanager
from sqlalchemy.orm import sessionmaker

engine = create_engine(DB_URL)
Session = sessionmaker(bind=engine)

@contextmanager
def session_scope():
    session = Session()
    try:
        yield session
        session.commit()
    except:
        session.rollback()
        raise
    finally:
        session.close()

Der obige Code erstellt einen session_scope-Kontextmanager, der das Sitzungsobjekt von SQLAlchemy hostet und die Datenbank betreibt. In der tatsächlichen Entwicklung können wir den with-Syntaxblock verwenden, um die Erstellung und Zerstörung von Sitzungen automatisch zu verwalten.

# 使用with自动管理session的创建与销毁
with session_scope() as session:
    # 实现对数据库的操作

2. Verwenden Sie Abfrageobjekte für eine effiziente Abfrage. Die Abfrage-API von SQLAlchemy bietet eine Methode zum programmgesteuerten Abfragen der Datenbank. Die Abfrage-API verfügt über leistungsstarke Filter-, Gruppierungs-, Sortier- und andere Funktionen, die Entwicklern dabei helfen können, Abfragebedingungen schnell und einfach zu definieren.

Query Objects ist der Rückgabewert von Query und ein für SQLAlchemy einzigartiger Datentyp. Abfrageobjekte sind eine Kettenstruktur und Abfrageanweisungen können durch Hinzufügen von Methodenketten erstellt werden. Abfrageobjekte können als „Abfragevorlage“ verwendet werden, die an vielen verschiedenen Stellen wiederverwendet werden kann, wodurch die Duplizierung von Code für mehrere ähnliche Abfragen vermieden wird.

# 查询books表中价格高于50的所有图书
books = session.query(Book).filter(Book.price > 50).all()

Bei komplexen Abfragen können mehrere Methoden zum Erstellen der Abfrage verwendet werden. Das folgende Beispiel zeigt, wie die Kettenstruktur von Query Objects verwendet wird, um Gruppierungs-, Sortier- und Eingrenzungsabfragen zu implementieren:

# 查询books表中,数量大于0,价格低于100元的所有书籍分页显示
books_query = session.query(Book).filter(Book.stock > 0).filter(Book.price < 100)
books_query = books_query.order_by(Book.price.desc())
books_query = books_query.limit(20).offset(0)
books = books_query.all()

Query Objects unterstützt auch viele andere Abfragemethoden, wie z. B. count(), first() usw., die sein können wird über die Query-API-Dokumentation angezeigt.

3. Verwenden Sie Laziness zur Leistungsoptimierung

Bei der Verwendung von Abfrageobjekten zum Abfragen großer Datenmengen ist es manchmal erforderlich, Laziness Lazy Loading zu verwenden, um die Datenbanklast zu reduzieren und die Abfrageeffizienz zu verbessern. Unter Faulheit versteht man das Abfragen dann, wenn die Daten benötigt werden, anstatt unmittelbar nach jeder Abfrage Ergebnisse zu erhalten.

So verwenden Sie Laziness:

# 查询users表中用户名以A开头的所有用户的ID
def get_user_ids(startswith):
    query = session.query(User.id).filter(User.username.startswith("A"))
    return query

Der obige Code gibt ein Query Objects-Objekt zurück, keine Liste.

Mit dieser Methode wird vermieden, dass der gesamte Ergebnissatz abgefragt und gespeichert wird, bevor alle Ergebnisse abgerufen werden. Teilen Sie die Abfrage in kleine Stapel auf und laden Sie Daten nur bei Bedarf. Dies kann die Belastung des Computers verringern und die Effizienz der Python-Webentwicklung beim Abfragen der Datenbank verbessern.

4. Verwenden Sie Hybridattribute, um automatisch zu zählen.

Bei der Python-Webentwicklung erfordert die gleichzeitige Verarbeitung von Abfragen für mehrere Tabellen normalerweise das Schreiben vieler Abfrageanweisungen, um Daten zu erhalten. Hybridattribute bieten Methoden zur Handhabung von Beziehungen mit mehreren Tabellen, mit automatischer Zählung und Aggregation.

Hier ist ein Codebeispiel mit Hybridattributen:

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer(), primary_key=True)
    name = Column(String(255), nullable=False)
    messages = relationship('Message')

    @hybrid_property
    def num_messages(self):
        return len(self.messages)

    @num_messages.expression
    def num_messages(cls):
        return (
            select([func.count(Message.id)])
            .where(cls.id == Message.user_id)
            .label("num_messages")
        )

In diesem Beispiel kann num_messages automatisch zählen, wie viele Nachrichten ein Benutzer hat. Die Abfrage-API kann diese Eigenschaft verwenden, als wäre sie ein Feld im Datenbankschema. Und können wie andere gewöhnliche Attribute abgefragt und gefiltert werden. num_messages nutzt die Eigenschaften von Hybridattributen und verwendet zwei Definitionen – eine ist ein reiner Python-definierter Dekorator und die andere ist eine SQLalchemy-Ausdrucksdefinition.

Kurz gesagt: Die Verwendung von SQLAlchemy für Datenbankoperationen in der Python-Webentwicklung kann Entwicklern dabei helfen, Datenbankoperationen eleganter durchzuführen und die Entwicklungseffizienz zu verbessern. Dieser Artikel stellt einige SQLAlchemy-Kenntnisse in der Python-Webentwicklung vor und hofft, den Lesern zu helfen. Für verschiedene Situationen sollten wir die umfangreiche API von SQLAlchemy so weit wie möglich vollständig nutzen, um Doppelarbeit zu vermeiden und die Python-Webentwicklung effizienter zu gestalten.

Das obige ist der detaillierte Inhalt vonSQLAlchemy-Tipps zur Python-Webentwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn