📜  SQLAlchemy ORM - 声明映射(1)

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

SQLAlchemy ORM - 声明映射

SQLAlchemy是一款Python库,可用于操作关系型数据库。它提供了两种使用方式:Core和ORM。ORM(对象关系映射)是一种编程技巧,将数据库表映射到类上,使开发者可以使用面向对象方式而不是关系型数据库的方式来操作数据。在ORM中,“声明映射”是最常用的模式。

声明

声明映射是将一个Python类映射到一个数据库表的过程。这个类通常被称为模型。模型定义了表的结构,包括列和约束(如主键和外键)。

语法:

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

在这个例子中,我们创建了一个基础模型,Base。使用这个模型,在下一步中定义模型类。

定义模型

要定义一个模型,必须创建一个类,该类继承自Base。类的名称应该是单数形式,并且应该反映表的名称。例如,如果表名是users,那么类应该被称为User

from sqlalchemy import Column, Integer, String

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

在这个例子中,我们创建了一个名为User的类,并将其映射到名为users的表。表有三个列:idnameageid是主键,name是字符串类型,age是整数类型。

操作数据

当定义好模型后,就可以使用ORM的API来操作数据。以下是一些基本操作的示例代码:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine('postgresql://localhost/mydatabase')
Session = sessionmaker(bind=engine)

# 添加数据
session = Session()
user = User(name='John', age=25)
session.add(user)
session.commit()

# 查询数据
users = session.query(User).all()
for user in users:
    print(user.name)

# 更新数据
user = session.query(User).filter_by(name='John').first()
user.age = 26
session.commit()

# 删除数据
user = session.query(User).filter_by(name='John').first()
session.delete(user)
session.commit()

在这个例子中,我们首先创建了一个engine对象,用于连接到数据库。然后我们创建了一个Session类,它是一个工厂函数,可用于创建数据库会话。我们通过创建一个新的Session对象来获取一个新的数据库会话。

接着,我们添加了一条新数据到数据库,并提交了我们的更改。我们使用查询语句获取了所有的User对象,并将它们全部打印出来。

然后,我们通过查询来获取一个用户,并更新了他的年龄。最后,我们又通过查询来获取一个用户,并将他从数据库中删除。

结论

ORM使得开发人员可以使用面向对象的方式操作关系型数据库。声明映射是使用ORM的最常用模式之一。定义模型是将一个Python类映射到一个数据库表的过程。我们使用了基础模型Base,然后创建了一个User模型并将其映射到一个数据库表。最后,我们使用ORM的API来对模型进行操作。