Pycharm警告SqlAlchemy模型中的意外类型

10 投票
1 回答
5063 浏览
提问于 2025-04-16 20:48

在一个SqlAlchemy模型中,我在pycharm里收到了一个警告,提示某个列的类型不太对。

下面是产生这个警告的简化代码:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class Peptide(Base):
    __tablename__ = 'peptides'

    sequence = Column(String, primary_key=True)
    scan = Column(Integer)

    def __init__(self, scan, sequence):
        self.scan = scan
        self.sequence = sequence

    def __repr__(self):
        return '<Peptide "%s" Scan %i>' % (self.sequence, self.scan)

这个警告是针对self.scan__repr__方法里的。如果我把格式字符串改成:

  return '<Peptide "%s" Scan %s>' % (self.sequence, self.scan)

这个警告就消失了。但实际上,self.scan在模型中是定义为整数,而不是字符串。奇怪的是,下面这个字符串却没有产生任何警告:

  return '<Scan %i>' % self.scan

这是pycharm检查器的过度反应,还是和SqlAlchemy的类型有关呢?

1 个回答

12

目前,PyCharm 对 SQLAlchemy ORM 的一些规则并不太了解,所以通常它无法准确识别模型字段的真实类型。如果你希望在 PyCharm 中获得对 SQLAlchemy 的特别支持,可以去投票支持这个问题 PY-4186,这个问题在 PyCharm 的问题追踪系统中。

更新:PY-4536 在2013年已经修复。不过,正如下面的评论所提到的,如果你使用 Mixins 还是会遇到一些问题,详情请见 PY-12002

撰写回答