SQLAlchemy筛选器始终返回fals

2024-09-27 09:37:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的玩家实体:

__tablename__ = 'player'

_id = Column('id', SmallInteger, primary_key=True)
_nickName = Column('nick_name', String)

def __init__(self, nickName):
    self._nickName = nickName

@property
def id(self):
    return self._id

@property
def nickName(self):
    return self._nickName.decode(encoding='UTF-8')

@nickName.setter
def nickName(self, nickName):
    self._nickName = nickName

当我这样做的时候:

^{pr2}$

我打印了players变量,我得到了这个:

SELECT player.id AS player_id, player.nick_name AS player_nick_name
FROM player
WHERE false

显然,当我在会话查询的末尾添加.first()时,结果是None。 我尝试了filter_by()并得到了相同的结果。在

欢迎任何帮助。在


Tags: nameself实体idreturndefas玩家
2条回答

在一般情况下,使用@hybrid_property修复此问题,您根本不需要手动解码。只需将列类型设置为Unicode,而不是String,并且假设您的服务器运行良好,您应该正确地返回一个unicode。在

您也根本不需要id属性。在

所以这门课你只需要:

class Player(Base):
    __tablename__ = 'player'

    id = Column(SmallInteger, primary_key=True)
    nickName = Column(Unicode)

(列名和__init__参数都可以自动生成。)

如果您的数据库无法正确处理Unicode,那么,这是一个不同的问题,我们很乐意帮助您解决。:)

不能使用常规的@propertys作为查询参数。使用^{}代替:

from sqlalchemy.ext.hybrid import hybrid_property

@hybrid_property
def nickName(self):
    return self._nickName.decode(encoding='UTF-8')

@nickName.setter
def nickName(self, nickName):
    self._nickName = nickName

这使得Player.nickName(类的属性也是如此)在SQL表达式中非常有用。在

相关问题 更多 >

    热门问题