Maison  >  Article  >  développement back-end  >  Conseils SQLAlchemy dans le développement Web Python

Conseils SQLAlchemy dans le développement Web Python

PHPz
PHPzoriginal
2023-06-17 12:03:111651parcourir

Avec le développement continu de la technologie Internet, le développement Web Python devient progressivement de plus en plus populaire en ligne. SQLAlchemy est l'un des frameworks ORM (Object-Relational Mapping) les plus populaires en Python. La méthode de fonctionnement de base de données efficace et simple qu'il fournit réalise non seulement le lien transparent entre le développement Web Python et la base de données, mais est également privilégiée par de nombreux développeurs. Cet article partagera quelques conseils SQLAlchemy dans le développement Web Python pour aider les développeurs à terminer le développement de projets plus efficacement.

1. Utilisez contextlib pour assurer la fermeture de la session

Les frameworks ORM incluent généralement un objet Session. Lorsqu'un développeur doit interagir avec la base de données, un objet de session sera créé et exploité, mais l'objet de session doit être fermé une fois l'opération terminée, sinon des problèmes inattendus se produiront.

Afin d'assurer la gestion des objets de session, Python peut utiliser la méthode contextuelle contextlib pour modifier temporairement les propriétés du système. L'utilisation de contextlib peut garantir que la session est fermée tout en évitant un traitement try/sauf trop fastidieux. Le code est le suivant :

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()

Le code ci-dessus crée un gestionnaire de contexte session_scope héberge l'objet de session de SQLAlchemy et exploite la base de données. En développement réel, nous pouvons utiliser le bloc de syntaxe with pour gérer automatiquement la création et la destruction de sessions.

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

2. Utilisez des objets de requête pour une requête efficace

L'API de requête de SQLAlchemy fournit une méthode pour interroger la base de données par programme. L'API de requête dispose de puissantes fonctions de filtrage, de regroupement, de tri et d'autres fonctions, qui peuvent aider les développeurs à définir rapidement et facilement les conditions de requête.

Query Objects est la valeur de retour de Query et est un type de données unique à SQLAlchemy. Les objets de requête sont une structure de chaîne et les instructions de requête peuvent être créées en ajoutant des chaînes de méthodes. Les objets de requête peuvent être utilisés comme « modèle de requête » qui peut être réutilisé à de nombreux endroits différents, évitant ainsi la duplication de code pour plusieurs requêtes similaires.

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

Pour les requêtes complexes, plusieurs méthodes peuvent être utilisées pour créer la requête. L'exemple suivant montre comment utiliser la structure en chaîne des objets de requête pour implémenter des requêtes de regroupement, de tri et de limitation :

# 查询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()

Les objets de requête prennent également en charge de nombreuses autres méthodes de requête, telles que count(), first(), etc., qui peuvent être consulté via la documentation de l'API Query.

3. Utilisez la paresse pour optimiser les performances

Lorsque vous utilisez des objets de requête pour interroger une grande quantité de données, il est parfois nécessaire d'utiliser le chargement paresseux paresse pour réduire la charge de la base de données et améliorer l'efficacité des requêtes. La paresse fait référence au fait d'interroger lorsque les données sont nécessaires, plutôt que d'obtenir des résultats immédiatement après chaque requête.

Voici comment utiliser la paresse :

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

Le code ci-dessus renvoie un objet Query Objects, pas une liste.

L'utilisation de cette méthode évite d'interroger et de stocker l'ensemble des résultats avant de récupérer tous les résultats. Divisez la requête en petits lots et chargez les données uniquement lorsque cela est nécessaire. Cela peut réduire la charge sur l'ordinateur et améliorer l'efficacité du développement Web Python lors de l'interrogation de la base de données.

4. Utilisez des attributs hybrides pour compter automatiquement

Dans le développement Web Python, le traitement de requêtes sur plusieurs tables en même temps nécessite généralement d'écrire de nombreuses instructions de requête pour obtenir des données. Les attributs hybrides fournissent des méthodes de gestion des relations multi-tables, avec comptage et agrégation automatiques.

Voici un exemple de code utilisant des attributs hybrides :

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")
        )

Dans cet exemple, num_messages peut automatiquement compter le nombre de messages d'un utilisateur. L'API Query peut utiliser cette propriété comme s'il s'agissait d'un champ dans le schéma de base de données. Et peut être interrogé et filtré comme d’autres attributs ordinaires. num_messages utilise les caractéristiques des attributs hybrides et utilise deux définitions : l'une est un pur décorateur défini par Python et l'autre est une définition d'expression SQLalchemy.

En bref, l'utilisation de SQLAlchemy pour les opérations de base de données dans le développement Web Python peut aider les développeurs à effectuer les opérations de base de données avec plus d'élégance et à améliorer l'efficacité du développement. Cet article présente certaines compétences SQLAlchemy dans le développement Web Python, dans l'espoir d'aider les lecteurs. Pour différentes situations, nous devons utiliser autant que possible la riche API fournie par SQLAlchemy pour éviter la duplication du travail et rendre le développement Web Python plus efficace.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn