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

关于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(类名.外键名)

相关文章:

  • 物联网商业模式
  • Java算术运算符与算术表达式
  • 第一章:大模型的起源与发展
  • 二、重学C++—C语言核心
  • JavaWeb——Mybatis、JDBC、数据库连接池、lombok
  • 【Linux系统编程】操作文件和目录的函数
  • 03_NLP常用的文本数据分析处理方法
  • elasticsearch 8.17.3部署文档
  • 『VUE』vue 引入Font Awesome图标库(详细图文注释)
  • 二、docker 存储
  • 文件系统调用(下) ─── linux第18课
  • 【redis】string应用场景:缓存功能和计数功能
  • UVa12303 Composite Transformations
  • c#客户端请求 Server-Sent Events
  • 音视频开发面试准备
  • Python组合数据类型(二)
  • Python字典,集合
  • Linux 网络:skb 数据管理
  • WEB实时推送消息的7种方式
  • 开发常用软件
  • 山东滕州市醉驾交通事故肇事人员已被刑拘
  • 马上评|独生子女奖励不能“私了”,政府诚信是第一诚信
  • 言短意长|党政主官如何塑造流量城市?
  • 这个五一假期,外贸拓内销好货和识货人在上海“双向奔赴”
  • 今晚上海地铁多条线路加开定点加班车,2号线运营至次日2时
  • 蓝佛安主持东盟与中日韩财长和央行行长系列会议并举行多场双边会见