2011-07-04 49 views
5

在一個SqlAlchemy模型中,我從pycharm得到一條警告,說一列有一個意外的類型。Pycharm對SqlAlchemy模型中的意外類型發出警告

簡化代碼產生該警告如下:

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的類型?

+0

我在Django中得到了同樣的結果 – velis

回答

6

目前PyCharm並不知道SQLAlchemy ORM約定,所以通常它不知道模型字段的實際類型。如果您想在PyCharm中獲得對SQLAlchemy的特殊支持,請隨時對PyCharm問題跟蹤器中的問題PY-4186進行投票。

更新:PY-4536在2013年修復了。如下所述,如果您使用Mixins,請參見PY-12002,但仍存在問題。

+1

當我使用'x = User(first_name ='foo',last_name ='bar')創建一個新實體時,我目前收到了一堆關於「意外的參數」的警告。 '例如。我認爲這是因爲兩個kwargs只被定義爲沒有覆蓋'__init__'的列。這是在pycharm 5.0.1上。這將在未來得到支持嗎? – exhuma

+0

@exhuma請向PyCharm的[issue tracker](https://youtrack.jetbrains.com/issues/PY)提交一個錯誤並提供一個代碼示例。 –

+1

創建一個代碼示例,我意識到這是因爲mixin。找到適當的問題([PY-12002](https://youtrack.jetbrains.com/issue/PY-12002))。 – exhuma