• 已删除用户
Jiamid
Jiamid
发布于 2023-04-21 / 47 阅读 / 0 评论 / 0 点赞

Sqlalchemy ORM 使用笔记

表模型建立

from sqlalchemy import Boolean,Column,Integer,String,DateTime,VARCHAR,CHAR

from sqlalchemy.ext.declaratice import declaratice_base

from sqlalchemy.sql import func

Base = declaratice_base()

class TableModel(Base):

    tablename = '表名'

    id = Column(Integer,primary_key=True)

    value = Column(VARCHAR(255),default='')

    created_at = Column(DateTime,server_default=func.now())

常用引用

from sqlalchemy.orm import Session

from sqlalchemy.sql import or_, and, func, desc

from sqlalchemy.dialects.mysql import insert

# 普通添加

session.add(TableModel(**value_dict))

# 批量添加

obj_list = [TableModel(**value_dict1),...]

session.bulk_save_objects(obj_list)

# 主键冲突则覆盖

# 单条记录

insert(TableModel).values(

**value_dict).on_duplicate_key_update(

updated_at=now()

)

# 多条记录

value_list = [value_dict1,value_dict2]

insert_stmt = insert(TableModel).values(value_list)

on_duplicate_key_stmt = insert_stmt.on_duplicate_key_update(

key=insert_stmt.inserted.key

)

session.query(TableModel).filter(

key=value

).delete()

# 统一更改

session.query(TableModel).filter(

key=value

).update({

TableModel.updated_at:now()

})

# map映射更改,必须含主键

value_list = [value_dict1,value_dict2]

session.bulk_update_mappings(TableModel,value_list)

session.query(字段).join(需要连接的表,条件).filter(

赛选条件).group_by(聚合key).order_by(排序字段).offset(偏移).limit(数量).all()

# 以上即是查询优先级的各种连接

# func 常用函数

func.count() 记数

func.min() 最小值

func.max() 最大值

func.IF() if函数

func.greatest(字段1,字段2) 比较两个字段取出最大值

func.now() 数据库当前时间

func.hour(DateTime) 获取时

func.dayofweek(DateTime) 获取星期几

func.length(字符串) 返回字节长度

func.replace(原字符串,需要替换的值,替换成什么值)

# 可用比较出key字段中与value值的相似度,用于排优先级

# 先用条件过滤出 key.like(f'%{value}%')

func.length(func.replace(TableModel.key,value,''))