игра двигатель дает мне Player
класса со свойством steamid
(исходя из C++, это просто простой пример о том, что он будет выглядеть в Python):Использовать свойство/атрибут базового класса в качестве столбца таблицы?
Я затем перейти к подклассу этого класса при добавлении атрибута gold
:
# my_plugin.py
class MyPlayer(game_engine.Player, Base):
gold = Column(Integer)
Теперь мне нужно хранить игрок gold
к базе данных с игроком steamid
в качестве первичного ключа для идентификации игрока. Как указать SQLAlchemy использовать свойство базового класса steamid
как первичный ключ?
Вот что-то глупо, я попробовал:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.hybrid import hybrid_property
import game_engine
Base = declarative_base()
class Player(game_engine.Player, Base):
__tablename__ = 'player'
_steamid = game_engine.Player.steamid
@hybrid_property
def steamid(self):
return type(self)._steamid.__get__(self)
Но да, это был длинный выстрел ...
sqlalchemy.exc.ArgumentError: Mapper Mapper|Player|player could not assemble any primary key columns for mapped table 'player'
Я чувствую, что это решение является «правильным» способом сделать это, поэтому я принял его, но я лично * в конечном итоге воспользуюсь ответом r-m-n, поэтому я чувствовал, что даю ему репутацию +100. Я надеюсь, что это руководство SO ... –
Я не на 100% проясняю рекомендации, но это ваша щедрость, чтобы вы могли потратить ее так, как хотите. Самое главное, что вы награждаете награду вообще, и вы это сделали. Я все еще благодарен за принятие. – Julian
С другой стороны, не могли бы вы объяснить, почему вы ожидаете использовать решение r-m-n? Для меня это кажется самонаказанием ... – Julian