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

joa*_*uin 7 python sqlalchemy pycharm

在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)
Run Code Online (Sandbox Code Playgroud)

该警告给出self.scan__repr__方法.如果我将格式字符串更改为:

  return '<Peptide "%s" Scan %s>' % (self.sequence, self.scan)
Run Code Online (Sandbox Code Playgroud)

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

  return '<Scan %i>' % self.scan
Run Code Online (Sandbox Code Playgroud)

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

And*_*ikh 9

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

更新:PY-4536于2013年修复.如下所述,如果您使用Mixins仍有问题,请参阅PY-12002.

  • 创建一个代码示例后,我意识到这是由于mixin引起的。找到了适当的问题([PY-12002](https://youtrack.jetbrains.com/issue/PY-12002))。 (2认同)