关于sqlalchemy的ORM的使用
关于sqlalchemy的ORM的使用
- 二、创建表
- 三、使用数据表、查询记录
二、创建表
- 使用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.都是布尔类型
.....
- 使用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)#创建表函数
- 获取当前时间函数
from sqlalchemy.sql import func
# func.now()表示获取当前时间
from typing_extensions import Annotated
共同时间属性 = Annontated[datetime.datetime,mapped_column(server_default=func.now())]
#其它与定义表时一样使用
- 一对多创建表
#使用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()强行将数据存入数据库。
三、使用数据表、查询记录
- 查询一下类
from slqalchemy import select,
query = select(表名).order_by(表名.字段名)
result = session.execute(query)
- 查询多个类
from slqalchemy import select
query = select(类型列表).join(类名.外键名)