📜  sqlalchemy orm 重复 - SQL (1)

📅  最后修改于: 2023-12-03 15:35:06.893000             🧑  作者: Mango

SQLAlchemy ORM简介

SQLAlchemy ORM是一个Python库,它提供了一个对象关系映射(ORM)的实现。它的主要特点是可以与多种关系型数据库(如MySQL、SQLite、PostgreSQL等)进行交互,同时提供了方便的查询和对象访问接口。

安装和配置

要使用SQLAlchemy ORM,您需要先安装SQLAlchemy和相应的数据库驱动程序。例如,如果您想使用MySQL数据库,您需要安装MySQL驱动程序:

pip install SQLAlchemy mysql-connector-python

然后,您需要创建一个数据库连接,例如:

from sqlalchemy import create_engine

engine = create_engine('mysql+mysqlconnector://user:password@localhost/mydatabase')
定义模型

在SQLAlchemy ORM中,模型对应于数据库中的表。您可以使用Python类来定义模型,例如:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    email = Column(String(120), unique=True)

    def __repr__(self):
        return f'<User {self.name}>'

在这个例子中,我们定义了一个名为User的模型,它表示数据库中的users表。User类继承自declarative_base(),这个函数返回一个基类,它定义了ORM需要的各种对象和属性。__tablename__属性指定了表的名称,idnameemail属性分别对应于表中的ID、姓名和电子邮件地址。

创建表

一旦您定义了模型,您可以使用Base.metadata.create_all(engine)方法来创建数据库表:

Base.metadata.create_all(engine)

这个方法会自动检查模型定义并生成相应的SQL语句以创建表。

查询和过滤

您可以使用session对象来查询和过滤模型实例。例如,以下代码可以获取所有用户:

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

users = session.query(User).all()

上述代码使用session.query()方法来构造查询。在这个例子中,我们查询了User模型的所有实例,并使用all()方法将查询结果作为列表返回。

您也可以使用一些过滤器来限制查询结果。例如,以下代码可以获取所有电子邮件地址以"example.com"结尾的用户:

users = session.query(User).filter(User.email.like('%example.com')).all()

上述代码使用filter()方法来添加一个过滤器。在这个例子中,我们使用like()函数来过滤电子邮件地址。

添加和修改

您可以使用session对象来添加和修改模型实例。例如,以下代码可以添加一个新用户:

user = User(name='Alice', email='alice@example.com')
session.add(user)
session.commit()

上述代码创建一个名为user的新实例,并将其添加到会话中。commit()方法将会话中的所有更改提交到数据库中。

您也可以修改现有的模型实例。例如,以下代码可以将用户的电子邮件地址从"alice@example.com"改为"alice2@example.com":

user = session.query(User).filter_by(name='Alice').first()
user.email = 'alice2@example.com'
session.commit()
删除

您可以使用session对象来删除模型实例。例如,以下代码可以删除所有电子邮件地址以"example.com"结尾的用户:

session.query(User).filter(User.email.like('%example.com')).delete()
session.commit()

上述代码使用delete()方法从数据库中删除所有满足过滤器条件的实例。

总结

SQLAlchemy ORM是一个强大的Python ORM库,它可以大大简化与关系型数据库的交互。在本文中,我们讨论了SQLAlchemy ORM的一些基础概念,并演示了如何使用ORM来处理数据库查询、添加、修改和删除等操作。