python sqlalchemy模型的建立

SQLAlchemy 是一个功能强大的 Python SQL 工具包和对象关系映射(ORM)库,用于管理和操作关系数据库。它为 Python 开发者提供了一种用 Python 对象来运行和管理 SQL 数据库的方式。

目录

[SQLAlchemy 的两个核心组成部分](#SQLAlchemy 的两个核心组成部分)

[SQLAlchemy 的主要功能](#SQLAlchemy 的主要功能)

[使用 SQLAlchemy 建立模型示例](#使用 SQLAlchemy 建立模型示例)

[1、安装 SQLAlchemy](#1、安装 SQLAlchemy)

2、导入所需模块

3、创建数据库连接

4、创建基类

5、定义模型

7、创建和使用会话

注意事项

SQLAlchemy 的两个核心组成部分

  1. SQLAlchemy Core:提供了数据库的直接访问,通过构建 SQL 表达式来执行查询。适合于需要精细控制 SQL的项目。

  2. SQLAlchemy ORM:允许你将 Python 类定义为数据库表对象,以对象的方式进行数据库操作。适合于更高层抽象级别的数据处理。

SQLAlchemy 的主要功能

  • 数据库连接和引擎创建 :通过 create_engine() 函数建立到数据库的连接。
  • 元数据管理 :使用 MetaDataTable 定义数据库结构。
  • SQL 表达式:使用 SQL表达式语言进行复杂查询。
  • ORM:使用 Python 类和对象操作数据,提高开发效率。
  • 关系映射:支持多对多、一对多及多种复杂关系的映射。
  • 事务管理 :通过 Session 管理事务。

使用 SQLAlchemy 建立模型的过程是将数据库表映射到 Python 类,以便于用面向对象的方法进行数据库操作。下面是建立一个 SQLAlchemy 模型的基本步骤,包括定义类、设置列和关系等。

使用 SQLAlchemy 建立模型示例

1、安装 SQLAlchemy

确保安装 SQLAlchemy 库:

python 复制代码
pip install sqlalchemy
2、导入所需模块
python 复制代码
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker
3、创建数据库连接

使用 create_engine 创建一个数据库连接。这里以 SQLite 为例:

python 复制代码
engine = create_engine('sqlite:///example.db')
4、创建基类

使用 declarative_base 创建一个基类,所有模型类将从这个基类继承:

python 复制代码
Base = declarative_base()
5、定义模型

定义模型类以映射数据库表和列。例如,我们创建两个简单的表:用户和地址。

python 复制代码
class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    address_id = Column(Integer, ForeignKey('addresses.id'))
    address = relationship("Address", back_populates="user")

    def __repr__(self):
        return f"<User(name={self.name}, address_id={self.address_id})>"

class Address(Base):
    __tablename__ = 'addresses'

    id = Column(Integer, primary_key=True)
    email_address = Column(String, nullable=False)
    user = relationship("User", back_populates="address")

    def __repr__(self):
        return f"<Address(email_address={self.email_address})>"
  • __tablename__ 指定数据库表名。
  • Column 定义表中的列类型和属性。
  • primary_key 用于设置主键。
  • ForeignKey 用于建立表间的外键关系。
  • relationship 用于定义表间的关系,并帮助 SQLAlchemy 在内存中管理这些关系。

6、创建表

通过 Base.metadata.create_all 将定义的模型映射到数据库并创建实际的表结构:

python 复制代码
Base.metadata.create_all(engine)
7、创建和使用会话
  • 利用 sessionmaker 创建一个用于数据库操作的会话:
python 复制代码
Session = sessionmaker(bind=engine)
session = Session()
  • 使用会话添加和查询数据:
python 复制代码
# 添加记录
new_address = Address(email_address="alice@example.com")
new_user = User(name="Alice", address=new_address)
session.add(new_user)
session.commit()

# 查询记录
user = session.query(User).filter_by(name='Alice').first()
print(user)

# 关闭会话
session.close()

注意事项

  • 对象关系映射(ORM):通过 SQLAlchemy 的 ORM,可以使用 Python 类和对象与数据库进行交互,不需要直接编写 SQL。
  • 对象关系管理relationship 在处理多表关系时非常有用。
  • 事务控制session 用于处理数据库事务,为保证数据一致性,需注意对会话进行提交或回滚操作。

使用 SQLAlchemy 建立模型可以帮助我们以面向对象的方式管理数据库,提升代码的可维护性和可读性,利用其强大的 ORM功能实现数据层的一个逻辑抽象和业务逻辑分离。

相关推荐
Anarkh_Lee5 分钟前
【小白也能实现智能问数智能体】使用开源的universal-db-mcp在coze中实现问数 AskDB智能体
数据库·人工智能·ai·开源·ai编程
算法_小学生8 分钟前
LeetCode 热题 100(分享最简单易懂的Python代码!)
python·算法·leetcode
橘子1328 分钟前
MySQL用户管理(十三)
数据库·mysql
Dxy123931021628 分钟前
MySQL如何加唯一索引
android·数据库·mysql
230万光年的思念30 分钟前
【无标题】
python
我真的是大笨蛋33 分钟前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
怣5033 分钟前
MySQL数据检索入门:从零开始学SELECT查询
数据库·mysql
shengli72235 分钟前
机器学习与人工智能
jvm·数据库·python
2301_7657031444 分钟前
Python迭代器(Iterator)揭秘:for循环背后的故事
jvm·数据库·python
倔强的石头1061 小时前
关键信息基础设施的数据库选型:高可用、全链路安全与平滑替代的技术实践
数据库·安全·金仓数据库