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



在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)

__repr__方法中对self.scan发出警告。如果我将格式字符串更改为:

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

警告消失了。但实际上self.scan在模型中被定义为整数,而不是字符串。令人惊讶的是,以下字符串没有产生任何警告:

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

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

目前PyCharm不知道SQLAlchemy ORM约定,所以通常它不知道模型字段的真实类型。如果你想在PyCharm中获得对SQLAlchemy的特殊支持,可以在PyCharm问题跟踪器中为PY-4186问题投票。

更新:PY-4536于2013年修复。正如下面提到的评论,如果你使用Mixins,仍然有一个问题,请参阅PY-12002。

最新更新