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)