SQLAlchemy映射表结构和对数据的CRUD

简介: SQLAlchemy映射表结构和对数据的CRUD

ORM模型映射到数据库中

declarative_base根据engine创建一个ORM基类

from sqlalchemy.ext.declarative import declarative_base
engine = create_engine(DB_URI)
Base = declarative_base(engine)

用这个Base类作为基类来写自己的ORM类。要定义__tablename__类属性,来指定这个模型映射到数据库中的表名

class Person(Base):
  __tablename__ ='t_person'

创建属性来映射到表中的字段,所有需要映射到表中的属性都应该为Column类型

class Person(Base):
  __tablename__ ='t_person'
  # 在这个ORM模型中创建一些属性,来跟表中的字段进行一一映射。
  # 这些属性必须是sqlalchemy给我们提供好的数据类型
  id = Column(Integer,primary_key=True,autoincrement=True)
  name = Column(String(50))
  age = Column(Integer)
  country = Column(String(50))

使用Base.metadata.create_all()来将模型映射到数据库中

Base.metadata.create_all()

注意

一旦使用Base.metadata.create_all()将模型映射到数据库中后,即使改变了模型的字段,也不会重新映射了

构建session对象

所有和数据库的ORM操作都必须通过一个叫做session的会话对象来实现,通过以下代码来获取会话对象

from sqlalchemy.orm import sessionmaker
engine = create_engine(DB_URI)
Base = declarative_base(engine)
session = sessionmaker(engine)()
  1. from sqlalchemy.orm import sessionmaker: 这行代码导入了sessionmaker,它是用于创建会话(session)的工厂函数。
  2. engine = create_engine(DB_URI): 这行代码使用了之前构建的数据库连接字符串(DB_URI)来创建了一个数据库引擎(engine)。
  3. Base = declarative_base(engine): 这行代码使用了declarative_base函数来创建了一个基类(Base)。然而,请注意,在declarative_base函数中传递了一个参数engine,这将指定此基类使用的数据库引擎。
  4. session = sessionmaker(engine)(): 这行代码创建了一个会话(session)对象(session)。sessionmaker函数接受一个引擎作为参数,用于创建会话。注意后面的额外的一对括号(),它们实际上调用了sessionmaker返回的函数,以创建一个实际的会话对象。

 

添加对象

def create_data_one():
  with Session() as session:
    p1 = Person(name = '春秋',age = 6 , country='北京')
    session.add(p1)
    session.commit()
def create_data_many():
  with Session() as session:
    p2 = Person(name = '吕布',age = 19 , country='北京')
    p3 = Person(name = '貂蝉',age = 18 , country='北京')
    session.add_all([p2,p3])
    session.commit()

create_data_one() 函数:

  • 这个函数使用了一个上下文管理器(with Session() as session),它创建了一个会话对象 session
  • 在这个函数中,创建了一个名为 p1Person 对象,该对象具有名字、年龄和国家信息。
  • 然后将 p1 添加到了会话中 (session.add(p1))。
  • 最后调用 session.commit() 来提交这个
  • 会话,将数据保存到数据库中。
  1. create_data_many()函数:
  • 同样地,这个函数也使用了上下文管理器来
  • 创建一个会话对象 session
  • 在这个函数中,创建了两个名为 p2p3Person 对象,分别代表了两个不同的人员信息。
  • 使用 session.add_all([p2, p3]) 一次性将这两
  • 个对象添加到会话中。
  • 最后调用 session.commit() 来提交这个会话,将数据保存到数据库中。

查找对象

def query_data_all():
  with Session() as session:
    all_person = session.query(Person).all()
    for p in all_person:
      print(p.name)
def query_data_one():
  with Session() as session:
    p1 = session.query(Person).first()
    print(p1.name)
def query_data_by_params():
  with Session() as session:
    # p1 = session.query(Person).filter_by(name='吕布').first()
    p1 = session.query(Person).filter(Person.name == '吕布').first()
    print(p1.age)

query_data_all() 函数:

  • 使用上下文管理器创建了一个会话对象 session。
  • 使用 session.query(Person).all() 查询了所有的 Person 对象,并将它们以列表的形式返回给变量 all_person。
  • 然后通过一个循环遍历了所有
  • 的人员,并打印了他们的名字。
  1. query_data_one()函数:
  • 同样地,使用上下文管理器创建了一个会话对象 session。
  • 使用 session.query(Person).first() 查询了第一个 Person 对象,并将其赋给了变量 p1。
  • 最后打印了 p1 对象的名字。
  1. query_data_by_params() 函数:
  • 这个函数演示了如何通过特定的条件来查询数据。
  • 使用了上下文管理器创建了一个会话对象 session。
  • 通过 session.query(Person).filter(Person.name == '吕布').first() 查询了名字为 '吕布' 的第一个 Person 对
  • 象,并将其赋给了变量 p1
  • 最后打印了 p1 对象的年龄。

 

修改对象

def delete_data():
  with Session() as session:
    p1 = session.query(Person).filter(Person.name == '貂蝉').first()
    session.delete(p1)
    session.commit()

1.使用上下文管理器创建了一个会话对象 session。


2.使用 session.query(Person).filter(Person.name == '貂蝉').first() 查询了名字为 '貂蝉' 的第一个 Person 对象,并将其赋给了变量 p1。


3.使用 session.delete(p1) 删除了 p1 对象,即删除了名字为 '貂蝉' 的人员信息。


4.最后,通过 session.commit() 提交了事务,将删除操作保存到数据库中。


相关文章
|
1月前
|
存储 Oracle 关系型数据库
Dataphin常见问题之想要周期执行任务如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。
|
1月前
|
存储 数据库
工作流Flowable 数据库表结构说明、Flowable 数据字典说明
工作流Flowable 数据库表结构说明、Flowable 数据字典说明
78 0
|
1月前
|
SQL Java 数据库连接
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
17 0
|
1天前
|
存储 SQL 监控
Visual Basic与数据库交互:实现数据访问和管理
【4月更文挑战第27天】本文探讨了使用Visual Basic进行数据库编程的基础,包括数据库基础、连接、数据访问技术如ADO.NET,数据绑定,事务处理,存储过程与视图。还强调了性能优化、安全性、测试与调试,以及持续维护的重要性。通过掌握这些概念和技巧,开发者能构建高效、可靠的数据驱动应用。
|
5天前
|
存储 SQL 数据库
数据库库表结构设计:原理、实例与最佳实践
数据库库表结构设计:原理、实例与最佳实践
18 0
|
10天前
|
存储 关系型数据库 MySQL
如何处理爬取到的数据,例如存储到数据库或文件中?
处理爬取的数据,可存储为txt、csv(适合表格数据)或json(适合结构化数据)文件。若需存储大量数据并执行复杂查询,可选择关系型(如MySQL)或非关系型(如MongoDB)数据库。以MySQL为例,需安装数据库和Python的pymysql库,创建数据库和表,然后编写Python代码进行数据操作。选择存储方式应考虑数据类型、数量及后续处理需求。
18 1
|
11天前
|
SQL 关系型数据库 MySQL
关系型数据库插入数据的语句
使用SQL的`INSERT INTO`语句向关系型数据库的`students`表插入数据。例如,插入一个`id`为1,`name`为'张三',`age`为20的记录:`INSERT INTO students (id, name, age) VALUES (1, '张三', 20)。如果`id`自增,则可简化为`INSERT INTO students (name, age) VALUES ('张三', 20)`。
14 2
|
11天前
|
SQL 存储 Oracle
关系型数据库查询数据的语句
本文介绍了关系型数据库中的基本SQL查询语句,包括选择所有或特定列、带条件查询、排序、分组、过滤分组、表连接、限制记录数及子查询。SQL还支持窗口函数、存储过程等高级功能,是高效管理数据库的关键。建议深入学习SQL及相应数据库系统文档。
9 2
|
18天前
|
人工智能 Cloud Native 算法
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
AI与云数据库的深度结合是数据库发展的必然趋势,基于AI能力的加持,云数据库未来可以实现更快速的查询和决策,帮助企业更好地利用海量数据进行业务创新和决策优化。
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
|
1月前
|
安全 Java 数据库连接
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
154 0

热门文章

最新文章