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


    目录

    ORM模型映射到数据库中

     SQLAlchemy对数据的增删改查操作​编辑

    构建session对象

     添加对象

    查找对象 

    修改对象

    删除对象


    ORM模型映射到数据库中

    declarative_base根据engine创建一个ORM基类

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

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

    1. class Person(Base):
    2. __tablename__ ='t_person'

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

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

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

    Base.metadata.create_all()
    

    注意

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

     SQLAlchemy对数据的增删改查操作

    构建session对象

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

    1. from sqlalchemy.orm import sessionmaker
    2. engine = create_engine(DB_URI)
    3. Base = declarative_base(engine)
    4. 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返回的函数,以创建一个实际的会话对象。

     

     添加对象

    1. def create_data_one():
    2. with Session() as session:
    3. p1 = Person(name = '春秋',age = 6 , country='北京')
    4. session.add(p1)
    5. session.commit()
    6. def create_data_many():
    7. with Session() as session:
    8. p2 = Person(name = '吕布',age = 19 , country='北京')
    9. p3 = Person(name = '貂蝉',age = 18 , country='北京')
    10. session.add_all([p2,p3])
    11. session.commit()

     

    1. create_data_one() 函数:

      • 这个函数使用了一个上下文管理器(with Session() as session),它创建了一个会话对象 session

      • 在这个函数中,创建了一个名为 p1Person 对象,该对象具有名字、年龄和国家信息。

      • 然后将 p1 添加到了会话中 (session.add(p1))。

      • 最后调用 session.commit() 来提交这个会话,将数据保存到数据库中。

    2. create_data_many() 函数:

      • 同样地,这个函数也使用了上下文管理器来创建一个会话对象 session

      • 在这个函数中,创建了两个名为 p2p3Person 对象,分别代表了两个不同的人员信息。

      • 使用 session.add_all([p2, p3]) 一次性将这两个对象添加到会话中。

      • 最后调用 session.commit() 来提交这个会话,将数据保存到数据库中。

    查找对象 

    1. def query_data_all():
    2. with Session() as session:
    3. all_person = session.query(Person).all()
    4. for p in all_person:
    5. print(p.name)
    6. def query_data_one():
    7. with Session() as session:
    8. p1 = session.query(Person).first()
    9. print(p1.name)
    10. def query_data_by_params():
    11. with Session() as session:
    12. # p1 = session.query(Person).filter_by(name='吕布').first()
    13. p1 = session.query(Person).filter(Person.name == '吕布').first()
    14. print(p1.age)
    1. query_data_all() 函数:

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

      • 使用 session.query(Person).all() 查询了所有的 Person 对象,并将它们以列表的形式返回给变量 all_person

      • 然后通过一个循环遍历了所有的人员,并打印了他们的名字。

    2. query_data_one() 函数:

      • 同样地,使用上下文管理器创建了一个会话对象 session

      • 使用 session.query(Person).first() 查询了第一个 Person 对象,并将其赋给了变量 p1

      • 最后打印了 p1 对象的名字。

    3. query_data_by_params() 函数:

      • 这个函数演示了如何通过特定的条件来查询数据。

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

      • 通过 session.query(Person).filter(Person.name == '吕布').first() 查询了名字为 '吕布' 的第一个 Person 对象,并将其赋给了变量 p1

      • 最后打印了 p1 对象的年龄。

     

    修改对象

    1. def update_data():
    2. with Session() as session:
    3. p1 = session.query(Person).filter(Person.name == '吕布').first()
    4. p1.age = 20
    5. # 提交事务
    6. session.commit()

     

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

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

    3. p1 对象的 age 属性更新为 20p1.age = 20

    4. 最后,通过 session.commit() 提交了事务,将更新保存到数据库中

    删除对象

    将需要删除的数据从数据库中查找出来,然后使用session.delete方法将这条数据从session中删除,最后做commit操作就可以了

    1. def delete_data():
    2. with Session() as session:
    3. p1 = session.query(Person).filter(Person.name == '貂蝉').first()
    4. session.delete(p1)
    5. session.commit()
    1. 使用上下文管理器创建了一个会话对象 session

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

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

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

  • 相关阅读:
    拦截器
    C++是如何从代码到游戏的
    php程序设计的基本原则
    【ESP32S3】VSCode 开发环境搭建
    物联网ARM开发-4STM32串口通信USART应用
    axios 封装
    【算法题】合法分组的最少组数
    《Docker极简教程》--Docker服务管理和监控--Docker服务的管理
    系统太多,多账号互通如何实现?
    使用新的 NVIDIA Isaac Foundation 模型和工作流程创建、设计和部署机器人应用程序
  • 原文地址:https://blog.csdn.net/m0_67093160/article/details/133218397