Python 请教一个 sqlchemy 问题,在 pycharm 下 select 方法为什么不提示支持的 where 等关键词呢

ZaZing · 2024年04月28日 · 最后由 王稀饭 回复于 2024年04月28日 · 4762 次阅读

代码如下,问题是为什么在 select(cls) 后面 pycharm 不提示支持的关键词呢。或者有对应的插件能支持提示?

import typing
from sqlalchemy import Column, INT, String, func, event
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.sql import select
class MyBase(Base):
    # db.scalar(sql) 返回的是标量(原始数据) <models.department.Department object at 0x000002F2C2D22110>
    # db.execute(sql) 返回的是元组 (<models.department.Department object at 0x000002F2C2D22110>)
    # db.scalars(sql).all()  [<models...>, <models...>, <models...>]
    # db.execute(sql).fetchall()  [(<models...>,), (<models...>,), (<models...>,)]
    __abstract__ = True
    id = Column(INT, primary_key=True, autoincrement=True)
    create_time = Column(String(32), default=func.now())
    update_time = Column(String(32), default=func.now(), onupdate=func.now())
    # is_delete = Column(INT, default=0, comment="删除标志, 0 非删除 1 删除")

    @staticmethod
    def on_update(mapper, connection, target):
        target.update_time = now_time()

    @classmethod
    @user3n
    async def execute_by_session(cls,stmt,params,session:AsyncSession=None):
        """

        :param stmt: sqlalchemy Executable 对象
        :param params:  params 参数
        :param session:session db会话
        :return:
        """
        return await session.execute(stmt,params)

    @classmethod
    @user5n_router
    async def execute_by_local(cls,stmt,params):
        session = g.hr_db_session
        return await session.execute(stmt,params)

    @classmethod
    async def execute(cls,stmt,params:typing.Any = None):
        session = g.hr_db_session
        if session:
            return await session.execute(stmt,params)
        return cls.execute_by_session(stmt,params)


    @classmethod
    async def get_by_id(cls,id):
        conditions = [cls.id == id]
        if getattr(cls,"is_delete",None):
            conditions.append(cls.is_delete == 0)
        stmt = select(cls).where(*conditions)
        result = await cls.execute(stmt)
        data = result.scalar()
        return data
共收到 4 条回复 时间 点赞

遇到过相同问题,更新、卸载重装都试了没解决,最后还是直接写 SQL 了

用的 sqlmodel,没碰到过这问题

session: scoped_session = g.hr_db_session
那就定义变量类型

2楼 已删除

可以先排查 pycharm 使用的 python interpretor 版本(在配置里找)是不是已经安装了 sqlalchemy 的相关依赖,如果确定版本没选错,那可能就是 pycharm 自身对依赖索引有问题,或者 sqlalchemy 对这些东西的定义没整好,不用管它,代码也能跑

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册