10

在 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 类型有关?

4

1 回答 1

12

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

更新:PY-4536 已在 2013 年修复。正如下面提到的评论,如果您使用 Mixins,仍然存在问题,请参阅PY-12002

于 2011-07-09T00:17:36.287 回答