2012-12-20 63 views
1

我需要为我的Flask应用程序实现一个API,并已看到Flask-Restless的建议。我已经跑进了一堵墙,只是基本使用了这个图书馆,并希望有人使用它可以提供帮助。Flask-Restless GET请求抛出SQLAlchemy错误

创建API管理和端点...

manager = APIManager(app, flask_sqlalchemy_db=db) 
manager.create_api(Gallery, methods=['GET', 'POST', 'PUT', 'DELETE']) 

...这与

class Gallery(db.Model): 
    __tablename__ = 'galleries' 
    id = db.Column(db.Integer, primary_key=True) 

    title = db.Column(db.String(25)) 

    def __init__(self, title): 
     self.title = title 

去现在,插入新条目的模式,我用这个jQuery的AJAX POST请求。这工作正常。我已经在sqlite数据库查看器中测试过它,并可以看到条目。

$('#form').on('submit', function(e){ 
     $.ajax({ 
      type: 'post', 
      url: '/api/galleries', 
      contentType:"binary/octet-stream", 
      data: JSON.stringify({'title': $('#title').val()}), 
      success: function(){ 
       alert('Success!'); 
      } 
     }); 
     e.preventDefault(); 
    }); 

这是问题所在。我去http://localhost:5000/api/galleries在我的浏览器,并获得以下消息:

sqlalchemy.orm.exc.NoResultFound
NoResultFound:没有行被发现的一个()

它的奇怪它会当api/galleries应该返回一个数据库条目列表时,尝试运行一个()。我尝试api/galleries/1并得到完全相同的错误。我加倍检查,主ID是1.我错过了什么?

+0

调试它并逐步跟踪以查找运行的语句。 – codecool

回答

1

今天我得到了同样的问题,并用一些解决方法解决了它。

这里是我的模型是这样的:

class User(db.Model): 
     id = db.Column(db.Integer, primary_key=True) 
     ... 

    class Key(db.Model): 
     user_id = db.Column(db.Integer, db.ForeignKey('auth_user.id')) 
     user = db.relationship('User', backref=db.backref('keys', lazy='dynamic')) 
     ... 

原因:

我查询users时得到了同样的错误消息。我发现烧瓶不安正试图查询相关的keys我的users和不幸的是,我的key表是空的,我得到了错误信息。

解决方法:

api_mgr.create_api(User, include_columns = ['email', 'username']) 

或:

api_mgr.create_api(User, exclude_columns = ['keys', 'SOME_OTHER_COLUMNS']) 

你可以,如果检查出

使用include_columnsexclude_columns创建API时排除keys列那里 是导致问题的任何相关表格。如果是原因,则可以使用include_columnsexclude_columns关键字参数。