2016-08-23 15 views
6

Używam SQLAlchemy i Pycharm, ale PyCharm nie widzi metod SQLAlchemy dla funkcji autouzupełniania.Funkcja autouzupełniania Pycharm SqlAlchemy nie działa

Kod:

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config['SECRET_KEY'] = 'secret!' 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.sqlite3' 
db = SQLAlchemy(app) 


class User(db.Model): 
    __tablename__ = 'users' 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(16), index=True, unique=True) 

if __name__ == '__main__': 
    db.create_all() 
    app.run(debug=True) 

Na przykład, jeśli chcę wywołać metodę sqlalchemy klasy użytkownik musi wpisuję metodą pełną nazwę ręcznie User.query.filter_by (username = 'Piotr') pierwszy() Autocomplete example.

Jak włączyć autouzupełnianie dla SQLAlchemy?

1) Tak, projekt został ponownie załadowany kilka razy
2) Tak, prawy tłumacz w pliku | ustawienia | Projekt
3) Tak, PyCharm nie pracuje w trybie oszczędzania energii
4) Tak, mam wersję Professional.

+1

Prawdopodobny duplikat autouzupełniania [PyCharm SQLAlchemy] (http://stackoverflow.com/questions/21793590/pycharm-sqlalchemy-autocomplete) –

Odpowiedz

3

pycharm (lub innego IDE) nie może znaleźć większość metod (query(), add(), commit() itp), ponieważ nie są zdefiniowane w flask_sqlalchemy.SQLAlchemy klasie. Metody SQLAlchemy są dodawane dynamicznie do obiektów flask_sqlalchemy.SQLAlchemy podczas inicjowania. Można znaleźć tę funkcję inicjalizacji w flask_sqlalchemy module:

def _include_sqlalchemy(obj): 
    for module in sqlalchemy, sqlalchemy.orm: 
     for key in module.__all__: 
      if not hasattr(obj, key): 
       setattr(obj, key, getattr(module, key)) 

tylko dla testów: można wpisać from sqlalchemy.orm import Query. Myślę, że PyCharm uzna to za obiekty w porządku.

Nie mogę zaproponować żadnego rozwiązania, może ktoś inny wie o możliwości dynamicznego dodawania autouzupełniania atrybutów.

Powiązane problemy