首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flask-SQLAlchemy ArgumentError:对象作为SQL字面值非法

Flask-SQLAlchemy ArgumentError:对象作为SQL字面值非法
EN

Stack Overflow用户
提问于 2018-04-09 07:55:33
回答 2查看 6.6K关注 0票数 4

尝试通过SQL-Alchemy执行select查询时,出现以下错误:

ArgumentError: Object <hello.models.User object at 0x106763210> is not legal as a SQL literal value

models.py

代码语言:javascript
运行
复制
Base = declarative_base()
Base.query = db_session.query_property()

@login_manager.user_loader
def get_user(uid):
    user = User.query.filter_by(id=uid).first()
    return user
#Where code error ocurrs

class User(Base, UserMixin):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120))
    email = db.Column(db.String(120), unique=True)
    company = db.Column(db.String(120))
    password = db.Column(db.String(90))
    admin = db.Column(db.Boolean, nullable=False, default=False)
EN

回答 2

Stack Overflow用户

发布于 2018-10-20 13:55:30

在我的例子中,我执行了一个查询,它有一个对象,而不是一个特定值。这就是我得到这个错误的原因。

代码语言:javascript
运行
复制
user=Users.query.filter_by(id=someid).first()#this was not a problem,

但第二个查询如下所示

代码语言:javascript
运行
复制
friends=Friends.query.filter_by(user).first()#this is where i got ht problem 

说flask-sqlalchemy-argumenterror-object-is-not-legal-as-a-sql-literal-value.

这意味着,

我正在尝试执行一个查询,它有一个对象

,而不是user.id(或类似的东西,应该是一个值)

因此,当我意识到这一点时,我将查询更改为

代码语言:javascript
运行
复制
Friends=Friends.query.filter_by(user.id).first()#worked fine
票数 3
EN

Stack Overflow用户

发布于 2018-06-01 04:01:02

在这里你必须找到一些关于你的问题的信息:link

类型系统现在有了特定的检查,用于在上下文中传递SQLAlchemy“SQLAlchemy”对象,否则这些对象将被作为文字值处理。

我在这里也遇到了同样的问题:

代码语言:javascript
运行
复制
def increase_relation(cls, previous, current):
    current = DBSession.query(cls).filter_by(left_sound_id=previous, right_sound_id=current).first()
    rate = int((100 - current.weight) - (100 - current.weight) / 1.618)
    DBSession.query(cls).\
        filter(cls.left_sound_id==previous).\
        filter(cls.right_sound_id==current).\ # error is here
        update({"weight": cls.weight + rate})

如您所见,我将"current“作为参数,并将其覆盖到下一行,这是错误的。我是这样解决的:

代码语言:javascript
运行
复制
def increase_relation(cls, previous_id, current_id):
    current_rel = DBSession.query(cls).filter_by(left_sound_id=previous_id, right_sound_id=current_id).first()
    rate = int((100 - current_rel.weight) - (100 - current_rel.weight) / 1.618)
    DBSession.query(cls).\
        filter(cls.left_sound_id==previous_id).\
        filter(cls.right_sound_id==current_id).\
        update({"weight": cls.weight + rate})

检查你的"uid",它的类型是否正确?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49723956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档