silnik gry zapewnia mnie z Player
klasy z steamid
własności (pochodzące od C++, jest to tylko prosty przykład na to, co to będzie wyglądać w Pythonie):Użyj właściwości/atrybutu klasy podstawowej jako kolumny tabeli?
I następnie przystąpić do podklasy tej klasy dodając atrybut gold
:
# my_plugin.py
class MyPlayer(game_engine.Player, Base):
gold = Column(Integer)
teraz muszę przechowywać gracz na gold
do bazy danych z odtwarzacza na steamid
jako klucza podstawowego w celu identyfikacji odtwarzacza. Jak mogę poinformować SQLAlchemy, aby użył właściwości klasy podstawowej jako steamid
jako klucza podstawowego?
Oto coś głupie Próbowałem:
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)
Ale tak, to był długi strzał ...
sqlalchemy.exc.ArgumentError: Mapper Mapper|Player|player could not assemble any primary key columns for mapped table 'player'
Mam wrażenie, że to rozwiązanie jest "właściwym" sposobem, aby to zrobić, więc zaakceptowałem to, ale * osobiście * skończę, używając odpowiedzi r-m-n, dlatego czułem, że chcę dać mu replikę +100. Mam nadzieję, że jest to zgodne z wytycznymi SO ... –
Nie jestem w 100% jednoznaczny w wytycznych, ale jest to Twoja nagroda, więc możesz wydać, jak chcesz. Najważniejsze jest to, że w ogóle przyznałeś nagrodę, a zrobiłeś to. Wciąż jestem wdzięczny za przyjęcie. – Julian
Zastanawiając się, dlaczego spodziewasz się skorzystać z rozwiązania r-m-n, możesz się zastanowić. Dla mnie to wygląda na samokrytycyzm ... – Julian