Python的ORM框架SQLAlchemy入门教程

yizhihongxing

下面给出详细的Python的ORM框架SQLAlchemy入门教程:

1. 什么是SQLAlchemy

SQLAlchemy是一个Python编程语言下的SQL工具和对象关系映射(ORM)库。它提供了一组介于底层SQL之上的高级抽象,使您可以在Python中轻松地执行常见的数据库操作。您可以使用它来连接到各种数据库管理系统,如:SQLite、 MySQL、Oracle、PostgreSQL和Microsoft SQL Server等,以及其他多种数据库。这里我们将以MySQL数据库为例进行演示说明。

安装SQLAlchemy

在Python中使用SQLAlchemy库,您需要安装SQLAlchemy和驱动程序。在这里我们使用MySQL数据库,所以我们需要安装MySQLdb库。下面是安装步骤:

pip install sqlalchemy
pip install mysqlclient

2. 创建连接

在使用SQLAlchemy之前,我们需要先创建一个数据库连接。下面是连接MySQL数据库的代码示例:

from sqlalchemy import create_engine

# 创建一个引擎(Engine)
engine = create_engine("mysql://username:password@host/dbname?charset=utf8")

解释一下代码:我们首先调用 create_engine() 这个函数,该函数的第一个参数是用于连接到数据库的字符串。格式为: dialect+driver://username:password@host:port/database?charset=utf8

其中:

  • dialect : 数据库类型,在这里我们使用"mysql"
  • driver : 数据库驱动程序,在这里使用 "pymysql"
  • username : 连接数据库的用户名
  • password : 连接数据库的密码
  • host : 数据库主机地址
  • port : 数据库端口号,默认值为3306
  • database : 数据库名称
  • charset : 连接数据库的编码,默认为"utf8"

3. 建立映射模型

使用SQLAlchemy,您可以通过简单的Python类来映射数据库中的表。这被称为对象关系映射(ORM)。我们将使用ORM模式,将数据库表映射到Python类以及将数据记录映射到对象。

下面是一个 Python类,表示数据库中的 users 表:

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


Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

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

这里,我们创建了一个User类,该类继承自 SQLAlchemy 的 Base 类,并设置 __tablename__ = 'users' 表示与数据库中的 users 表对应。可以看到我们定义了一个 id 字段,该字段为 Integer 类型,为该表的主键, name, age, email 字段均为String类型,用于存储用户名、年龄和电子邮件等信息。

4. 创建表

接下来,我们需要使用ORM模型中的 create_all() 函数来创建表。此函数可以自动扫描所有继承 SQLAlchemy Base 类的类,并根据类定义创建相应的数据库表。

Base.metadata.create_all(engine)

5. 增加记录

来到了SQLAlchemy的第一步骤,最基本的ORM操作之一:插入记录。

from sqlalchemy.orm import Session

session = Session(bind=engine)

new_user = User(name='Lucy', age=26, email='lucy@example.com')
session.add(new_user)
session.commit()

首先,我们需要创建一个 session 对象,这个对象就像一个本地事务,负责处理整个数据插入过程。如果想要插入数据,需要创建一个新的 Python 对象来表示该数据。在这里我们定义了一个新的用户对象,然后将其添加到会话中。最后,我们调用了 commit() 函数来将数据写入数据库。

6. 查询记录

接下来,我们来学习一下如何从数据库中查询数据。在此之前,我们需要先插入一些数据。

session = Session(bind=engine)

# 查询所有用户
users = session.query(User).all()
print(users)

# 查询年龄大于等于25的用户
users = session.query(User).filter(User.age >= 25).all()
print(users)

在这里,我们首先通过 session.query(User).all() 来查询所有用户的记录,然后通过 session.query(User).filter(User.age >= 25).all() 来查询年龄大于等于25的所有用户的记录。

7. 删除记录

为了删除数据库中的数据,我们需要首先查询到该记录并将其传递给 remove() 函数,然后调用 commit() 函数来执行真正的删除操作。

session = Session(bind=engine)

# 查询 id 为1的用户
user = session.query(User).filter_by(id=1).first()

# 删除用户
session.delete(user)

# 提交删除操作
session.commit()

在这里,我们首先查询 id 为1的用户,然后通过 session.delete(user) 来删除该用户的记录,最后调用 commit() 函数来执行删除操作。

综上所述,这就是一个完整的Python的ORM框架SQLAlchemy的入门教程,包含了创建连接、建立映射模型、创建表、插入数据、查询数据以及删除数据等基本操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python的ORM框架SQLAlchemy入门教程 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 关于javascript:data:image/jpeg;base64如何获取其宽度

    关于javascript:data:image/jpeg;base64如何获取其宽度 在Web开发中,经常会使用Base64编码的图片。在JavaScript中,可以使用data:image/jpeg;base64格式来表示Base64编码的JPEG图片。本文将详细讲解如何获取这种格式的图片的宽度,包括两个示例。 示例1:使用Image对象获取宽度 可以使用…

    other 2023年5月8日
    00
  • Java数据结构和算法之冒泡,选择和插入排序算法

    Java数据结构和算法之冒泡、选择和插入排序算法 冒泡排序算法 算法思路 冒泡排序是一种基础的排序算法,它通过比较相邻元素的大小并交换位置,将最大(或最小)的元素逐步“冒泡”到序列的最后,从而完成排序。 具体地,冒泡排序的过程如下: 从序列的第一个元素开始,依次比较相邻的两个元素,如果前面的元素大于后面的元素,则交换它们的位置。 继续依次比较相邻的元素,直到…

    other 2023年6月27日
    00
  • 一篇文章带你搞定JAVA内存泄漏

    一篇文章带你搞定JAVA内存泄漏 什么是内存泄漏? 内存泄漏是指在程序中分配的内存空间没有被正确释放,导致这些内存空间无法再被程序使用,从而造成内存的浪费。在Java中,内存泄漏是指对象在不再被使用时仍然占用内存空间,无法被垃圾回收器回收。 如何检测内存泄漏? Java提供了一些工具和技术来检测内存泄漏,其中最常用的是使用内存分析工具,如Eclipse Me…

    other 2023年8月2日
    00
  • 注册表常用命令大全 通向程序的快捷途径

    注册表常用命令是Windows系统中的一个重要组成部分,它可以让用户方便地查找并操作系统中的各种设置和应用程序。下面是使用注册表常用命令的攻略: 1. 如何打开注册表 首先,让我们来看看如何打开注册表。有两种方法可以打开注册表: 方法一:使用“运行”方式打开 使用“运行”方式打开,步骤如下: 使用快捷键“Win + R”打开“运行”对话框; 在对话框中输入“…

    other 2023年6月25日
    00
  • 图文详解vue中proto文件的函数调用

    让我来给大家详细讲解“图文详解vue中proto文件的函数调用”的完整攻略。 什么是proto文件 proto文件是 Protocol Buffer 的描述文件,是一种轻便高效的序列化工具,类似于 JSON 和 XML。在 Vue 中,我们可以使用 proto 文件来定义数据结构,进行数据传输。 如何调用proto文件中的函数 我们使用 protobufjs…

    other 2023年6月26日
    00
  • Win7 32位系统电脑不能复制粘贴右键粘贴选项是灰色的

    问题描述: 有用户反映,他的Win7 32位系统电脑不能复制粘贴,右键粘贴选项是灰色的,无法选择,这给他的工作带来了一定的麻烦,请问如何解决此问题? 解决方法: 1.检查剪贴板服务是否启动 首先我们需要排除剪贴板服务未启动的可能性,可以按下win+r组合键,在弹出的运行窗口中输入services.msc并回车打开服务管理器,找到Distributed Tra…

    other 2023年6月27日
    00
  • ads(armdevelopersuite)安装与卸载中的问题

    ADS(ARM Developer Suite)安装与卸载中的问题 ADS(ARM Developer Suite)是一款ARM嵌入式开发工具,可用于开发和调试ARM处理器的应程序。在安装和卸载ADS时,可能会遇到些问题。本文将详细介绍ADS安装和卸载中的问题,并提供两个示例说明。 1. ADS安装中的问题 以下是ADS安装中可能遇到的问题: 1.1 安装程…

    other 2023年5月8日
    00
  • Vue 生命周期和数据共享详解

    Vue 生命钩子函数:- created:在实例创建后调用;- mounted:挂载后调用;- updated:数据更新时调用;- destroyed:实例销毁后调用。 数据共享指的是在 Vue 实例中通过 props 和 events 实现父子组件之间的数据传递,具体如下: 通过 props 把子组件需要的数据从父组件传到子组件; 通过事件机制将子组件产生…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部