【问题标题】:Flask-Restless GET request throwing up SQLAlchemy errorFlask-Restless GET 请求抛出 SQLAlchemy 错误
【发布时间】:2012-12-20 18:09:40
【问题描述】:

我需要为我的 Flask 应用程序实现一个 API,并看到了针对 Flask-Restless 的建议。我只是对这个库的基本用法遇到了困难,希望使用过它的人可以提供帮助。

创建 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 db viewer 中对其进行了测试,并且可以看到条目。

$('#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: 没有为 one() 找到行

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

【问题讨论】:

  • 调试它并逐步跟踪以找到运行的语句。

标签: python flask flask-sqlalchemy flask-extensions


【解决方案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 时收到了同样的错误信息。我发现flask-restless 正在尝试为我的users 查询相关的keys,不幸的是,我的key 表是空的,我收到了错误消息。

解决方法:

在创建 API 时使用 include_columns 或 exclude_columns 排除 keys 列:

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

或:

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

您可以检查是否有任何相关表导致问题。如果是原因,您可以使用 include_columns 或 exclude_columns 关键字参数。

【讨论】:

    猜你喜欢
    • 2016-06-18
    • 2019-12-02
    • 1970-01-01
    • 2015-11-18
    • 2014-08-11
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多