当前位置: 首页 > article >正文

关于sqlalchemy的ORM的使用

关于sqlalchemy的ORM的使用

  • 二、创建表
  • 三、使用数据表、查询记录

二、创建表

  1. 使用Mapped来映射字段
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,Mapped,mapped_column

Base = declarative_base()
engine = create_engine('sqlite:///数据库位置')
Session = sessionmaker()

class 类名(Base):
   __tablename__ = '数据库中的表名'
   字段名:Mapped[类型] = Mapped_column(限制条件)
   #限制条件有primary_key,unique,nullable.都是布尔类型 
   .....
  1. 使用Annotated定义共同属性字段
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,Mapped,mapped_column
from typing_extensions import Annotated
 
Base = declarative_base()
engine = create_engine('sqlite:///数据库位置')
Session = sessionmaker()
共同属性 = Annotated[类型,mapped_column(限制条件)]
#注解的方式将字段类型定义好了

class 类名(Base):
	__tablename__ = '数据库的的表名'
	字段名:Mapped[共同属性]
	......
	def __repr__(self):
		return f'字段:{self.字段名}'
	#__repr__表示查询返回的值

Base.metadata.create_all(engine)#创建表函数
  1. 获取当前时间函数
from sqlalchemy.sql import func
# func.now()表示获取当前时间
from typing_extensions import Annotated

共同时间属性 = Annontated[datetime.datetime,mapped_column(server_default=func.now())]
#其它与定义表时一样使用
  1. 一对多创建表
#使用id来定义
# 在mapped_column中添加ForeignKey('被关联表名.id').如:
mapped_column(ForeignKey('被关联表名.id'))
关联表字段:Mapped[类型] = mapped_column(ForeignKey('被关联表名.id'))
#整体表传入
被关联表名(小写):Mapped[被关联表名] = relationship(lazy=False | True(默认))
#正向查询
关联表名.被关联表名(小写)#就可以查询被关联表的值
#lazy=False时,关联表和被关联表一起查询
#lazy=True时,只有调用关联表名.被关联表名时才查询
#反向查询
被关联表名(小写):Mapped[被关联表名] = relationship(lazy=False | True(默认),backref='查询被关联表的变量')

双向查询定义(第二种方法)
在被关联表中定义关联关联表
注:List(from typing import List)
关联表字段名:Mapped[List[“关联表名”]] = relationship(back_populates=‘被关联表名字段’)
在关联表中定义关联被关联表
被关联表名(小写):Mapped[被关联表名] = relationship(back_populates=‘关联表名字段’))。如:
在这里插入图片描述

注:可以用session.flush()强行将数据存入数据库。

三、使用数据表、查询记录

  1. 查询一下类
from slqalchemy import select,
query = select(表名).order_by(表名.字段名)
result = session.execute(query)
  1. 查询多个类
from slqalchemy import select
query = select(类型列表).join(类名.外键名)

http://www.kler.cn/a/581779.html

相关文章:

  • R语言中byrow参数的作用
  • 【GIT】non-fast-forward错误
  • 大白话react第十九章React 与 WebGL 项目的深度拓展和优化
  • 计算机图形学交互式技术实验(鼠标、拾取操作和菜单)——绘制可用鼠标进行修改颜色的五角星和矩形
  • Linux rpcbind漏洞
  • Python----计算机视觉处理(Opencv:自适应二值化,取均值,加权求和(高斯定理))
  • GitHub 项目版本管理与 Release 发布流程记录
  • 学习文章:Spring Boot 中 Redis 配置与序列化管理
  • 软件工程概述
  • 消息队列MQ使用场景有哪些?
  • 逐梦DBA:基本的SELECT语句
  • C#运算符详解
  • GStreamer —— 2.15、Windows下Qt加载GStreamer库后运行 - “播放教程 1:Playbin 使用“(附:完整源码)
  • AI重构私域增长:从流量收割到终身价值运营的三阶跃迁
  • AutoMQ x OSS 的 Iceberg 数据入湖的最佳实践
  • 深度评测DeepSeek、ChatGPT O1和谷歌Gemini AI应用开发场景 - DeepSeek性能完胜!
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-7.3.1直接调用ES API的风险与替代方案
  • 如何使用 CSS 实现黑色遮罩效果
  • 深度学习基础:线性代数本质2——线性组合、张成的空间与基
  • Torch 模型 model => .onnx => .trt 及利用 TensorTR 在 C++ 下的模型部署教程