4

私は単純なプレイヤーエンティティを持っています:

__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()が、同じ結果が得られました。

どんな助けでも大歓迎です。

4

2 に答える 2

2

@property通常の s をクエリ パラメータとして使用することはできません。@hybrid_property代わりにaを使用します。

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 式で役立ちます。

于 2013-01-18T21:46:54.903 に答える
2

を使用@hybrid_property すると、一般的なケースでこれが修正されますが、手動でデコードする必要はまったくありません。列タイプをandUnicodeの代わりに設定するだけStringで、サーバーがうまく機能すると仮定すると、正しく返されるはずですunicode.

idまた、プロパティはまったく必要ありません。

したがって、このクラスに必要なのは次のとおりです。

class Player(Base):
    __tablename__ = 'player'

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

(列名と__init__引数の両方を自動的に生成できます。)

データベースが Unicode を正しく処理していない何らかの理由がある場合、それは別の問題であり、解決を支援したいと考えています。:)

于 2013-01-18T21:54:03.270 に答える