使用SQLAlchemy库进行数据库操作的基本流程[简单示例]

Base = declarative_base()

定义用户表

class User(Base):
tablename = ‘users’
id = Column(Integer, primary_key=True)
username = Column(String(50), unique=True, nullable=False)
email = Column(String(100), nullable=False)

创建数据库表

Base.metadata.create_all(engine)

创建会话

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

插入数据

new_user = User(username=‘john_doe’, email=‘john@example.com’)
session.add(new_user)
session.commit()

查询数据

users = session.query(User).all()
for user in users:
print(user.username, user.email)

更新数据

user = session.query(User).filter_by(username=‘john_doe’).first()
user.email = ‘john_updated@example.com’
session.commit()

删除数据

user = session.query(User).filter_by(username=‘john_doe’).first()
session.delete(user)
session.commit()

关闭会话

session.close()


1. **create\_engine**:


	* `create_engine` 方法用于创建一个数据库引擎,它接受一个连接字符串作为参数,指定要连接的数据库的类型和位置。在这个例子中,我们使用 SQLite 数据库,连接字符串是 'sqlite:///examplesqlalchemy.db'。
2. **declarative\_base**:


	* `declarative_base` 是一个基类工厂函数,它创建一个新的基类,所有的数据模型类都应该继承自这个基类。这样可以使得数据模型类和表格之间建立起关联。
3. **Column**:


	* `Column` 是用于定义表格列的类,它接受不同的参数来指定列的属性,例如数据类型、是否是主键、是否唯一等。在这个例子中,我们定义了整型的 `id` 列和两个字符串类型的列 `username` 和 `email`。
4. **Base.metadata.create\_all(engine)**:


	* 这行代码通过 `Base.metadata.create_all(engine)` 创建所有已定义的数据模型类对应的表格结构。它会根据数据模型类中的定义自动生成对应的数据库表格。
5. **sessionmaker(bind=engine)**:


	* `sessionmaker` 是一个用于创建数据库会话的类工厂函数,它接受一个绑定的数据库引擎作为参数,用于实例化会话对象。在这个例子中,我们将数据库引擎 `engine` 绑定到会话生成器上。
6. **session.add(new\_user)** 和 **session.commit()**:


	* `session.add(new_user)` 将新创建的 `User` 对象添加到当前会话中,而 `session.commit()` 则提交当前会话的所有更改,包括插入操作,将其持久化到数据库中。
7. **session.query(User).all()**:


	* `session.query(User)` 是用于创建查询的方法,这里我们查询 `User` 表中的所有记录。`.all()` 方法返回查询结果的列表。
8. **session.query(User).filter\_by(username='john\_doe').first()**:


	* 这行代码演示了如何使用 `filter_by` 进行过滤查询,查找 `username` 为 'john\_doe' 的记录,并返回第一条符合条件的记录。
9. **session.delete(user)**:


	* `session.delete(user)` 用于从数据库中删除指定的对象,这里我们删除了之前查询到的 `user` 对象。
10. **session.close()**:


	* 最后,`session.close()` 方法关闭了当前会话,释放了数据库连接资源。


------------------  
  
     创建一个简单的 SQLAlchemy ORM 模型,假设我们要创建一个学生信息管理系统,包含学生和课程两个数据表。每个学生可以选择多门课程,而每门课程也可以被多个学生选择。  
     定义了三个 ORM 模型类:`Student`、`Course` 和 `StudentCourse`,分别对应了学生、课程和学生与课程之间的关联表。`relationship` 方法用于定义类之间的关系,`secondary` 参数指定了关联表,`back_populates` 参数表示了双向关系。



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

创建数据库引擎

engine = create_engine(‘sqlite:///students.db’, echo=True)

声明基类

Base = declarative_base()

定义学生模型

class Student(Base):
tablename = ‘students’
id = Column(Integer, primary_key=True)
name = Column(String)
courses = relationship(‘Course’, secondary=‘student_courses’, back_populates=‘students’)

定义课程模型

class Course(Base):
tablename = ‘courses’
id = Column(Integer, primary_key=True)
name = Column(String)
students = relationship(‘Student’, secondary=‘student_courses’, back_populates=‘courses’)

定义学生和课程之间的关联表

class StudentCourse(Base):
tablename = ‘student_courses’
student_id = Column(Integer, ForeignKey(‘students.id’), primary_key=True)
course_id = Column(Integer, ForeignKey(‘courses.id’), primary_key=True)

创建数据表

Base.metadata.create_all(engine)

创建会话

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

关闭会话

session.close()



**`ForeignKey`** 是 SQLAlchemy 中用于定义外键约束的一个类。外键约束用于指定一个列或一组列与另一个表的列之间的关系。在关系型数据库中,外键约束可以确保两个表之间的数据一致性,并且可以建立表之间的关联关系。  
  
 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*


SQLAlchemy 是一个用于 Python 编程语言的 SQL 工具包和**对象关系映射(ORM)工具**。它允许开发人员使用 Python 语言来管理数据库,通过提供高级的抽象接口,使得操作数据库变得更加简单和高效。以下是 SQLAlchemy 的一些主要特点和功能:


1. **对象关系映射(ORM)**:


	* SQLAlchemy 提供了 ORM 功能,可以将数据库表格映射到 Python 对象上,使得开发人员可以直接使用对象来表示和操作数据库中的数据,而不必编写复杂的 SQL 查询语句。
2. **数据库引擎和连接池**:


	* SQLAlchemy 提供了数据库引擎和连接池的抽象层,支持多种数据库后端,并且能够有效地管理数据库连接,提高数据库操作的性能和效率。
3. **SQL 表达式语言**:


	* SQLAlchemy 提供了一种 SQL 表达式语言,可以使用 Python 对象来构建 SQL 查询语句,而不必直接编写原始的 SQL 语句,这样做既方便又安全。
4. **事务管理**:


	* SQLAlchemy 支持事务管理,开发人员可以通过会话(Session)来管理数据库操作的事务,确保数据的完整性和一致性。
5. **查询构建器**:


	* SQLAlchemy 提供了灵活的查询构建器,开发人员可以使用各种方法来构建复杂的数据库查询,包括过滤、排序、连接等操作,从而实现灵活的数据检索功能。
6. **自动数据表创建**:


	* 使用 SQLAlchemy,开发人员可以通过定义 Python 类来表示数据表结构,然后通过调用 `create_all()` 方法来自动生成对应的数据库表格结构,简化了数据库的初始化过程。
7. **跨数据库兼容性**:


	* SQLAlchemy 支持多种数据库后端,包括 MySQL、PostgreSQL、SQLite 等,使得开发人员可以在不同的数据库系统之间无缝切换,而不必修改大量代码。


\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*


**SQLAlchemy 2.0 是一个重大更新**,引入了许多新功能和更改。以下是 SQLAlchemy 2.0 的一些关键更新:

 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/54ee97a30112e28776eb73fd59d7b20d.png)

![img](https://img-blog.csdnimg.cn/img_convert/7e4bb43383be1c476974af65610e0bc4.png)

![img](https://img-blog.csdnimg.cn/img_convert/a8420941cbc380548eef08be32bff2f6.png)

![img](https://img-blog.csdnimg.cn/img_convert/965a9a59bc1c3d3dde95bc27e097098b.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

9.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

![](https://img-blog.csdnimg.cn/img_convert/97535e479d5459ffcff42c4d7359adbf.jpeg)
  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值