我有一個簡單的播放器實體:SQLAlchemy的過濾器總是返回false
__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
當我這樣做:
players = session.query(Player).filter(Player.nickName=='foo')
我打印players
變種我得到這個:
SELECT player.id AS player_id, player.nick_name AS player_nick_name
FROM player
WHERE false
顯然,當我在會話查詢結束時添加.first()
時,結果爲None
。 我嘗試過filter_by()
並得到相同的結果。
任何幫助,歡迎。
我可以問你爲什麼創建屬性而不是直接使用列? –
如果您確實需要使用屬性,請選中['synonym'](http://docs.sqlalchemy.org/en/rel_0_8/orm/mapper_config.html#sqlalchemy.orm.synonym),['synonym_for'](http ://docs.sqlalchemy.org/en/rel_0_8/orm/extensions/declarative.html#sqlalchemy.ext.declarative.synonym_for)和[hybrid](http://docs.sqlalchemy.org/en/rel_0_8/orm/ extensions/hybrid.html)擴展名。 –
@Audrius,因爲這是我發現修復編碼問題的最簡單方法。如果你有這個想法,我會刪除getter/setter(我在窗戶上)。編輯:Eevve答案解決這個問題 – martinqt