如何将SQL Server的SUSER_SNAME函数映射到SQLAlchemy ORM
如何在SQLAlchemy中自定义调用SQL Server的SUSER_SNAME函数
完全可以通过自定义函数的方式实现,以下是两种常用方案:
方案一:继承GenericFunction创建规范的自定义函数
SQLAlchemy支持通过继承GenericFunction扩展内置函数集,适合需要明确指定返回类型的场景:
from sqlalchemy import func from sqlalchemy.sql.functions import GenericFunction from sqlalchemy.types import String # 定义对应SQL Server SUSER_SNAME的自定义函数类 class suser_sname(GenericFunction): type = String # 指定函数返回值类型为字符串 name = "SUSER_SNAME" # 与SQL Server中的函数名完全对应
定义完成后,就能像调用内置user()函数一样使用:
res = connection.execute(func.suser_sname()) # 提取结果值 current_user = res.scalar()
方案二:直接通过func对象调用原生函数
如果不需要额外配置返回类型,也可以直接通过func对象直接访问SQL Server原生函数,SQLAlchemy会自动生成对应的SQL语句:
from sqlalchemy import func # 直接调用func.SUSER_SNAME() res = connection.execute(func.SUSER_SNAME()) current_user = res.scalar()
结合ORM查询使用
自定义函数的优势在于可以无缝集成到ORM查询中,例如:
from sqlalchemy.orm import Session session = Session(bind=engine) # 查询业务数据时同时获取当前登录的SQL Server用户 query_result = session.query( YourModel.id, YourModel.name, func.suser_sname().label("current_login_user") ).all()
内容的提问来源于stack exchange,提问作者quant
相关产品推荐
相关产品推荐

