Python ORM编程基础示例

Python ORM编程基础示例是指使用Python编程语言中的ORM(Object-Relational Mapping)技术来进行数据库操作的基础示例代码。下面分为两个示例,分别是基本的增删改查操作和多表操作。

示例一:基本的增删改查操作

1. 创建数据库表

首先需要创建一个数据库表,可以使用MySQL或SQLite等数据库,这里以SQLite为例。

创建一个student表,包含学生的id、name和age字段。在SQLite命令行中执行以下命令来创建该表:

CREATE TABLE student
(
 id   INTEGER PRIMARY KEY AUTOINCREMENT,
 name VARCHAR(20) NOT NULL,
 age  INTEGER
);

2. 安装ORM框架

接下来需要安装Python的ORM框架,这里以SQLAlchemy为例,使用以下命令进行安装:

pip install sqlalchemy

3. 连接数据库

在Python中使用SQLAlchemy连接SQLite数据库,代码如下:

from sqlalchemy import create_engine

engine = create_engine('sqlite:///test.db', echo=True)

其中,engine是SQLAlchemy的核心对象,用于连接数据库。这里使用了SQLite数据库,并将连接日志打开。

4. 定义ORM映射

ORM映射指将数据表和Python类进行映射,这里定义一个Student类来映射student表,代码如下:

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

Base = declarative_base()

class Student(Base):
    __tablename__ = 'student'

    id = Column(Integer, primary_key=True)
    name = Column(String(20), nullable=False)
    age = Column(Integer, default=0)

在这段代码中,首先引入了declarative_base()函数来创建一个SQLAlchemy的基类Base,然后定义了Student类,并使用__tablename__属性指定了对应的数据表名。最后,将id、name和age字段的属性定义为对应的Column对象,并指定一些基本属性,例如是否是主键、是否可以为空等等。

5. 创建表和删除表

现在定义好了ORM映射,接下来可以使用Base来创建表或删除表。

Base.metadata.create_all(engine)
Base.metadata.drop_all(engine)

其中,create_all方法将会根据ORM映射自动创建相关的数据表,而drop_all方法则会删除所有的数据表。

6. 插入数据

插入数据可以通过创建实例对象并调用session的add方法来实现:

from sqlalchemy.orm import sessionmaker

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

student1 = Student(name='张三', age=18)
student2 = Student(name='李四', age=20)

session.add(student1)
session.add(student2)
session.commit()

这里创建一个Session对象,它可以自动关联到engine中使用的database文件,并且支持事务。然后,创建两个Student实例对象,并使用session的add方法将其添加到session对象中。最后,调用commit方法提交事务。

7. 查询数据

查询数据可以使用session的query方法来实现:

students = session.query(Student).all()
for student in students:
    print(student.id, student.name, student.age)

这里查询了所有的student表数据,并将其以列表的形式返回。同时,可以使用for循环打印出每一个Student实例对象的id、name和age属性信息。

8. 修改数据和删除数据

修改数据和删除数据也非常简单,只需要先查询到要修改或删除的实例对象,然后再对属性进行修改或直接调用session的delete方法删除即可。

student = session.query(Student).filter_by(name='张三').first()
student.age = 20

session.delete(student)

session.commit()

这里先查询到了名字为“张三”的学生,并将其年龄改为了20岁,然后直接将其删除。最后再调用commit方法提交事务即可。

示例二:多表操作

前面的例子只操作了一个student表,现在考虑两个表之间的关联。

1. 创建数据库表和ORM映射

假设还有一个score表,它记录了学生的成绩信息。score表和student表之间有一对多的关系,即一个学生可能有多个成绩记录。在SQLite命令行中执行以下命令来创建该表:

CREATE TABLE score
(
 id       INTEGER PRIMARY KEY AUTOINCREMENT,
 student_id INTEGER NOT NULL,
 subject  VARCHAR(20) NOT NULL,
 score    INTEGER,
 FOREIGN KEY(student_id) REFERENCES student(id)
);

这里定义了一个score表,包含id、student_id、subject和score四个字段。其中,student_id字段是外键,引用了student表的id字段。

现在需要在Python中定义一个Score类来映射score表,代码如下:

class Score(Base):
    __tablename__ = 'score'

    id = Column(Integer, primary_key=True)
    student_id = Column(Integer, ForeignKey('student.id'), nullable=False)
    subject = Column(String(20), nullable=False)
    score = Column(Integer, default=0)

    student = relationship("Student", backref="scores")

在这个类中,定义了id、student_id、subject和score四个字段,其中,student_id使用ForeignKey引用了student表的id字段。另外,还定义了一个student属性,它使用relationship和backref属性来实现与Student类之间的关系。

2. 插入数据

首先需要插入一些学生的记录和成绩记录,代码如下:

student1 = Student(name='张三', age=18)
student2 = Student(name='李四', age=20)

score1 = Score(subject='语文', score=90)
score2 = Score(subject='数学', score=80)
score3 = Score(subject='英语', score=85)

student1.scores.append(score1)
student1.scores.append(score2)
student2.scores.append(score3)

session.add(student1)
session.add(student2)

session.commit()

这里创建了两个学生实例对象和三个成绩实例对象。然后,将score1和score2添加到student1的scores属性中,并将score3添加到student2的scores属性中。最后,将两个学生实例对象添加到session中并提交事务。

3. 查询数据

查询张三的所有成绩,代码如下:

scores = session.query(Score).join(Student).filter(Student.name == '张三').all()
for score in scores:
    print(score.subject, score.score)

这里首先使用join方法关联了student表,然后使用filter方法指定了要查询的学生名字为“张三”,最后调用all方法查询所有结果并遍历打印出每个成绩对象的subject和score属性。

查询每门课程的平均成绩,代码如下:

from sqlalchemy import func

avg_scores = session.query(Score.subject, func.avg(Score.score)).group_by(Score.subject).all()
for subject, avg_score in avg_scores:
    print(subject, avg_score)

这里使用了SQLAlchemy的函数func和group_by方法来查询每门课程的平均成绩。首先通过group_by方法将成绩对象按照科目进行分组,然后使用avg方法求出每组的平均值。最后使用all方法查询结果并遍历打印出每门课程的平均成绩。

4. 修改数据和删除数据

修改和删除数据的方法和示例一中类似,这里不再赘述。需要注意的是,修改或删除学生成绩时,需要先查询到对应的学生对象,然后再通过学生对象来修改或删除成绩。例如以下代码可以将李四的所有成绩删除:

student = session.query(Student).filter_by(name='李四').first()
scores = student.scores

for score in scores:
    session.delete(score)

session.commit()

这里首先查询到名字为“李四”的学生对象,然后获取其scores属性,遍历删除每个成绩对象。最后提交事务即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python ORM编程基础示例 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 详解Python Flask API 示例演示(附cookies和session)

    详解Python Flask API 示例演示(附cookies和session) 在此文中,我们将为您详细讲解如何使用Python Flask构建API,并附上cookies和session示例。文中包含以下两条示例: 访问API并设置cookies API使用session来记录登录状态 访问API并设置cookies 如果您要访问API并在浏览器中设置…

    Flask 2023年5月15日
    00
  • Python webargs 模块的简单使用

    Python webargs 模块是一个用于验证和从请求中提取参数的工具包。它有助于在开发 Web 应用时处理复杂的查询参数,并提供了一个简单的解决方案来处理数据验证和转换。 安装 webargs 可以通过 pip 安装: pip install webargs 基本用法 引入 webargs: from webargs import fields from…

    Flask 2023年5月15日
    00
  • http通过StreamingHttpResponse完成连续的数据传输长链接方式

    当我们需要在Web应用程序中实现连续的数据传输时,可以使用HTTP的StreamingHttpResponse来完成长链接方式。由于HTTP是基于请求-响应模型的,因此我们无法像传统Socket编程那样实现长链接方式,这时StreamingHttpResponse就为我们提供了一种有效的解决办法。 首先,我们需要明确的是,StreamingHttpRespo…

    Flask 2023年5月16日
    00
  • Python3创建Django项目的几种方法(3种)

    下面给你详细讲解Python3创建Django项目的几种方法。 方法一:使用django-admin.py 安装 Django,使用 pip install Django 命令进行安装。 在终端中输入 django-admin.py startproject projectname,其中 projectname 为你要创建的项目名称。 在终端中输入 cd p…

    Flask 2023年5月16日
    00
  • Pycharm+Flask零基础项目搭建入门的实现

    我将为您详细讲解“Pycharm+Flask零基础项目搭建入门的实现”的完整攻略。该攻略分为以下几个步骤: 1. 安装Pycharm和Flask 首先需要安装Python的开发环境——Pycharm。Pycharm是一个功能强大、使用便捷的Python集成开发环境,可以大大提高开发效率。 安装完Pycharm后,需要安装Flask,这是一个基于Python的…

    Flask 2023年5月15日
    00
  • python flask几分钟实现web服务的例子

    下面是关于“python flask几分钟实现web服务的例子”的完整攻略,包含两个示例: 示例 1:Hello World 1. 安装 Flask 在命令行中输入以下命令安装Flask: pip install flask 2. 创建 Python 文件 在任何目录中创建一个名为app.py的 Python 文件,然后复制以下代码: from flask …

    Flask 2023年5月15日
    00
  • Flask 使用类组织配置详情

    Flask是Python的一个轻量级Web应用框架,支持使用类来组织配置。本文将详细讲解如何使用类组织配置。 创建配置类 在使用类来组织配置时,需要先创建一个配置类,通常命名为Config,示例如下: class Config: DEBUG = False TESTING = False DATABASE_URI = ‘sqlite:///:memory:’…

    Flask 2023年5月15日
    00
  • Python基于Webhook实现github自动化部署

    当我们需要在github代码更新后自动化部署Web应用时,我们可以通过使用Webhook来实现。本文将介绍如何使用Python基于Webhook实现github自动化部署,整个流程可以分为以下几个步骤: 在github仓库中添加Webhook 编写Python代码监听github的Webhook请求 自动拉取代码 自动部署应用 下面,我们分别来详细讲解每个步…

    Flask 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部