【100天精通python】Day34:使用python操作数据库_ORM(SQLAlchemy)使用

目录

 专栏导读 

1 ORM 概述

2 SQLAlchemy 概述

3 ORM:SQLAlchemy使用

 3.1 安装SQLAlchemy:

3.2 定义数据库模型类:

3.3 创建数据表:

3.4 插入数据:

 3.5 查询数据:

3.6 更新数据:

3.7 删除数据:

3.8  关闭会话:

4  实战

  设计一个简单的图书管理系统。


 专栏导读 

专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html


1 ORM 概述

        ORM(对象关系映射)是一种编程技术,用于在关系型数据库和面向对象编程语言之间建立映射关系,使得数据库中的表和记录可以映射到编程语言中的对象和类。ORM的目标是简化数据库操作,使开发人员能够以面向对象的方式处理数据库。

        在Python中,有多个ORM库可用,其中最知名的是SQLAlchemy。SQLAlchemy提供了一种将Python对象与数据库表之间建立映射关系的方式,允许开发人员使用Python类来操作数据库。

ORM的优势包括:

  1. 抽象化数据库操作:ORM隐藏了底层数据库的细节,开发人员可以更专注于业务逻辑,而不需要编写复杂的SQL查询。

  2. 面向对象编程:ORM允许开发人员使用面向对象的方式处理数据,使得代码更加清晰、可维护。

  3. 跨数据库支持:ORM库通常提供了跨多种数据库的支持,开发人员可以轻松切换数据库而不需要更改大量代码。

  4. 自动建表和迁移:ORM库可以自动根据定义的Python类生成数据库表,并支持数据库迁移。

  5. 查询生成器:ORM库通常提供了查询生成器,使得编写查询更加简单和直观。

  6. 事务管理:ORM库可以帮助管理事务,确保数据的一致性和完整性。

2 SQLAlchemy 概述

        SQLAlchemy是一个强大的Python SQL工具包和对象关系映射(ORM)库,它允许开发人员使用Python编程语言与关系型数据库进行交互。SQLAlchemy提供了一种灵活且强大的方式来执行SQL查询、插入、更新、删除等操作,同时还支持将数据库表映射到Python类,使开发人员可以以面向对象的方式操作数据库。

以下是SQLAlchemy的主要特点和概述:

  1. ORM功能:SQLAlchemy的核心特点之一是其ORM功能。它允许你通过定义Python类来映射数据库表和记录,将数据库操作转化为面向对象的操作,使代码更加直观和易于维护。

  2. 多种数据库支持:SQLAlchemy支持多种关系型数据库,包括MySQL、SQLite、PostgreSQL、Oracle等,允许开发人员在不同数据库之间切换而无需更改大部分代码。

  3. 灵活性:SQLAlchemy提供了多种方式来执行SQL操作,包括原始SQL查询、查询生成器以及ORM查询。这使得开发人员可以根据需求选择适合的方式。

  4. 连接池管理:SQLAlchemy支持连接池管理,可以在应用程序和数据库之间维护一组数据库连接,提高性能和效率。

  5. 事务管理:SQLAlchemy允许你使用事务管理来确保数据库操作的一致性和完整性,可以提交、回滚和中断事务。

  6. 数据库迁移:SQLAlchemy提供了Alembic工具,用于数据库迁移和版本管理,使得对数据库结构的变更更加可控。

  7. 多种关联:SQLAlchemy支持多种关联类型,如一对多、多对多等关联关系,使数据库之间的关系更加清晰。

  8. 跨表查询:SQLAlchemy允许在ORM查询中执行跨表联接,从而实现复杂的查询操作。

  9. 性能优化:SQLAlchemy提供了各种性能优化选项,如缓存、批量操作等,以提升大规模数据处理的效率。

  10. 丰富的文档和社区支持:SQLAlchemy拥有丰富的官方文档和活跃的社区,使得学习和解决问题变得更加容易。

        总之,SQLAlchemy是一个强大的Python数据库工具包,适用于各种规模的项目,从小型应用到大型企业级系统。它的灵活性、面向对象的设计和多种功能使得它成为Python开发人员进行数据库操作的首选工具之一。

3 ORM:SQLAlchemy使用

        当使用Python中的ORM(例如SQLAlchemy)时,你可以通过创建Python类来定义数据库模型,然后使用这些模型对象来执行数据库操作。以下是使用SQLAlchemy的详细示例:

3.1 安装SQLAlchemy

首先,你需要安装SQLAlchemy库。你可以使用以下命令在终端中安装它:

pip install sqlalchemy

3.2 定义数据库模型类

创建一个Python类来定义数据库模型。每个类表示一个表,类的属性表示表的列。

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

# 创建数据库连接
engine = create_engine('sqlite:///example.db')
Base = declarative_base()

# 定义模型类
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

3.3 创建数据表

通过调用create_all()方法创建数据库表。

Base.metadata.create_all(engine)

3.4 插入数据

创建一个模型对象,然后将其添加到会话中并提交。

from sqlalchemy.orm import sessionmaker

# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

# 添加数据
new_user = User(name='Alice', age=25)
session.add(new_user)
session.commit()

 3.5 查询数据

使用会话查询模型对象。

# 查询数据
user = session.query(User).filter_by(name='Alice').first()
if user:
    print("User found:", user.name, user.age)
else:
    print("User not found")

3.6 更新数据

可以更新模型对象的属性,然后提交会话来更新数据库。

user.age = 26
session.commit()

3.7 删除数据

使用delete()方法删除模型对象,然后提交会话。

session.delete(user)
session.commit()

3.8  关闭会话

记得在完成操作后关闭会话。

session.close()

4  实战

  设计一个简单的图书管理系统。

以下是一个使用SQLAlchemy的图书管理系统的完整示例: 

确保已安装sqlalchemy,  pip install sqlalchemy

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 创建数据库连接
engine = create_engine('sqlite:///library.db')
Base = declarative_base()

# 定义作者模型类
class Author(Base):
    __tablename__ = 'authors'
    id = Column(Integer, primary_key=True)
    name = Column(String)

# 定义图书模型类
class Book(Base):
    __tablename__ = 'books'
    id = Column(Integer, primary_key=True)
    title = Column(String)
    author_id = Column(Integer, ForeignKey('authors.id'))

# 创建数据表
Base.metadata.create_all(engine)

# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

# 添加作者
author1 = Author(name='J.K. Rowling')
author2 = Author(name='George Orwell')

session.add_all([author1, author2])
session.commit()

# 添加图书
book1 = Book(title='Harry Potter and the Sorcerer\'s Stone', author_id=author1.id)
book2 = Book(title='1984', author_id=author2.id)

session.add_all([book1, book2])
session.commit()

# 查询数据
print("Authors:")
authors = session.query(Author).all()
for author in authors:
    print("Author:", author.name)

selected_author = session.query(Author).filter_by(name='J.K. Rowling').first()
if selected_author:
    print("\nBooks by", selected_author.name)
    books = session.query(Book).filter_by(author_id=selected_author.id).all()
    for book in books:
        print("Book:", book.title)

# 关闭会话
session.close()

上述代码示例演示了如何使用SQLAlchemy库创建一个简单的图书管理系统。

  1. 导入所需模块:代码开始时导入了所需的SQLAlchemy模块,包括创建引擎、定义模型类、创建数据表和会话等。

  2. 创建数据库连接和基类:使用create_engine函数创建了SQLite数据库连接,然后通过declarative_base创建了一个基类Base

  3. 定义模型类:定义了两个模型类,即Author(作者)和Book(图书)。每个类对应一个表,类的属性对应表的列。

  4. 创建数据表:通过调用Base.metadata.create_all(engine)方法,基于模型类创建了数据库中的数据表。

  5. 创建会话:使用sessionmaker创建了一个会话类Session,然后通过Session()创建了一个会话实例session

  6. 添加数据:创建了两个作者实例,使用session.add_all()将其添加到会话中,并通过session.commit()提交到数据库。

  7. 查询数据:使用session.query()查询了作者和图书信息,并进行了打印输出。

  8. 关闭会话:在所有操作完成后,通过session.close()关闭了会话,释放资源。

总体而言,这个示例展示了如何使用SQLAlchemy来创建数据库模型、执行数据库操作、查询数据以及关闭会话。通过使用ORM,你可以将数据库操作转化为面向对象的方式,使代码更加清晰、可维护。你可以根据需求进一步扩展这个示例,添加更多功能和复杂性。

猜你喜欢

转载自blog.csdn.net/qq_35831906/article/details/132271771