X-Git-Url: http://git.veekun.com/zzz-pokedex.git/blobdiff_plain/2c0980e4dcadaa31d7ea7ebab174a6fd81723090..204a43b3b15946a64b971966706fba713065b7ea:/pokedex/db/tables.py diff --git a/pokedex/db/tables.py b/pokedex/db/tables.py index 3638e53..57207dd 100644 --- a/pokedex/db/tables.py +++ b/pokedex/db/tables.py @@ -2,6 +2,7 @@ from sqlalchemy import Column, ForeignKey, MetaData, Table from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.orm import backref, relation from sqlalchemy.types import * from sqlalchemy.databases.mysql import * @@ -127,10 +128,16 @@ class Generation(TableBase): main_region = Column(Unicode(16), nullable=False) class GrowthRate(TableBase): + """`formula` is written in LaTeX math notation.""" __tablename__ = 'growth_rates' id = Column(Integer, primary_key=True, nullable=False) + name = Column(Unicode(20), nullable=False) + formula = Column(Unicode(500), nullable=False) + +class Item(TableBase): + __tablename__ = 'items' + id = Column(Integer, primary_key=True, nullable=False) name = Column(Unicode(16), nullable=False) - formula = Column(Unicode(255), nullable=False) class Language(TableBase): __tablename__ = 'languages' @@ -150,6 +157,12 @@ class LocationArea(TableBase): internal_id = Column(Integer, nullable=False) name = Column(Unicode(64), nullable=True) +class Machine(TableBase): + __tablename__ = 'machines' + machine_number = Column(Integer, primary_key=True, nullable=False, autoincrement=False) + generation_id = Column(Integer, ForeignKey('generations.id'), primary_key=True, nullable=False, autoincrement=False) + move_id = Column(Integer, ForeignKey('moves.id'), nullable=False) + class MoveEffect(TableBase): __tablename__ = 'move_effects' id = Column(Integer, primary_key=True, nullable=False) @@ -167,6 +180,7 @@ class Move(TableBase): __tablename__ = 'moves' id = Column(Integer, primary_key=True, nullable=False) name = Column(Unicode(12), nullable=False) + generation_id = Column(Integer, ForeignKey('generations.id'), nullable=False) type_id = Column(Integer, ForeignKey('types.id'), nullable=False) power = Column(SmallInteger) pp = Column(SmallInteger, nullable=False) @@ -278,6 +292,28 @@ class PokemonFormSprite(TableBase): pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False) name = Column(Unicode(16), nullable=True) +class PokemonItem(TableBase): + __tablename__ = 'pokemon_items' + pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False) + version_id = Column(Integer, ForeignKey('versions.id'), primary_key=True, nullable=False, autoincrement=False) + item_id = Column(Integer, ForeignKey('items.id'), primary_key=True, nullable=False, autoincrement=False) + rarity = Column(Integer, nullable=False) + +class PokemonMove(TableBase): + __tablename__ = 'pokemon_moves' + pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False) + version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False, autoincrement=False) + move_id = Column(Integer, ForeignKey('moves.id'), primary_key=True, nullable=False, autoincrement=False, index=True) + pokemon_move_method_id = Column(Integer, ForeignKey('pokemon_move_methods.id'), primary_key=True, nullable=False, autoincrement=False) + level = Column(Integer, primary_key=True, nullable=True, autoincrement=False) + order = Column(Integer, nullable=True) + +class PokemonMoveMethod(TableBase): + __tablename__ = 'pokemon_move_methods' + id = Column(Integer, primary_key=True, nullable=False, autoincrement=False) + name = Column(Unicode(64), nullable=False) + description = Column(Unicode(255), nullable=False) + class PokemonName(TableBase): __tablename__ = 'pokemon_names' pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False) @@ -331,6 +367,8 @@ class Version(TableBase): version_group_id = Column(Integer, ForeignKey('version_groups.id'), nullable=False) name = Column(Unicode(32), nullable=False) + generation = association_proxy('version_group', 'generation') + ### Relations down here, to avoid ordering problems Encounter.pokemon = relation(Pokemon, backref='encounters') @@ -346,8 +384,18 @@ EncounterTypeSlot.type = relation(EncounterType, backref='slots') EvolutionChain.growth_rate = relation(GrowthRate, backref='evolution_chains') +Generation.versions = relation(Version, secondary=VersionGroup.__table__) + LocationArea.location = relation(Location, backref='areas') +Machine.generation = relation(Generation) + +Move.type = relation(Type, backref='moves') +Move.generation = relation(Generation, backref='moves') +Move.target = relation(MoveTarget, backref='moves') +Move.effect = relation(MoveEffect, backref='moves') +Move.machines = relation(Machine, backref='move') + Pokemon.abilities = relation(Ability, secondary=PokemonAbility.__table__, order_by=PokemonAbility.slot, backref='pokemon') @@ -365,6 +413,7 @@ Pokemon.evolution_children = relation(Pokemon, primaryjoin=Pokemon.id==Pokemon.e remote_side=[Pokemon.id])) Pokemon.flavor_text = relation(PokemonFlavorText, backref='pokemon') Pokemon.foreign_names = relation(PokemonName, backref='pokemon') +Pokemon.items = relation(PokemonItem) Pokemon.generation = relation(Generation, backref='pokemon') Pokemon.shape = relation(PokemonShape, backref='pokemon') Pokemon.stats = relation(PokemonStat, backref='pokemon') @@ -374,10 +423,18 @@ PokemonDexNumber.generation = relation(Generation) PokemonFlavorText.version = relation(Version) +PokemonItem.item = relation(Item, backref='pokemon') +PokemonItem.version = relation(Version) + PokemonFormGroup.pokemon = relation(Pokemon, backref=backref('form_group', uselist=False)) PokemonFormSprite.pokemon = relation(Pokemon, backref='form_sprites') +PokemonMove.pokemon = relation(Pokemon, backref='pokemon_moves') +PokemonMove.version_group = relation(VersionGroup) +PokemonMove.move = relation(Move, backref='pokemon_moves') +PokemonMove.method = relation(PokemonMoveMethod) + PokemonName.language = relation(Language) PokemonStat.stat = relation(Stat) @@ -391,5 +448,6 @@ Type.target_efficacies = relation(TypeEfficacy, ==TypeEfficacy.target_type_id, backref='target_type') -Version.generation = relation(Generation, secondary=VersionGroup.__table__, - backref='versions') +Version.version_group = relation(VersionGroup, backref='versions') + +VersionGroup.generation = relation(Generation, backref='version_groups')