Added a generation_id column to the pokemon table.
[zzz-pokedex.git] / pokedex / db / tables.py
1 from sqlalchemy import Column, ForeignKey, MetaData, Table
2 from sqlalchemy.ext.declarative import declarative_base
3 from sqlalchemy.orm import relation
4 from sqlalchemy.types import *
5 from sqlalchemy.databases.mysql import *
6
7 metadata = MetaData()
8 TableBase = declarative_base(metadata=metadata)
9
10 class Ability(TableBase):
11 __tablename__ = 'abilities'
12 id = Column(Integer, primary_key=True, nullable=False)
13 name = Column(Unicode(24), nullable=False)
14 flavor_text = Column(Unicode(64), nullable=False)
15 effect = Column(Unicode(255), nullable=False)
16
17 class ContestEffect(TableBase):
18 __tablename__ = 'contest_effects'
19 id = Column(Integer, primary_key=True, nullable=False)
20 appeal = Column(SmallInteger, nullable=False)
21 jam = Column(SmallInteger, nullable=False)
22 flavor = Column(Unicode(255), nullable=False)
23 effect = Column(Unicode(255), nullable=False)
24
25 class EggGroup(TableBase):
26 __tablename__ = 'egg_groups'
27 id = Column(Integer, primary_key=True, nullable=False)
28 name = Column(Unicode(16), nullable=False)
29
30 class EvolutionChain(TableBase):
31 __tablename__ = 'evolution_chains'
32 id = Column(Integer, primary_key=True, nullable=False)
33 growth_rate_id = Column(Integer, ForeignKey('growth_rates.id'), nullable=False)
34 steps_to_hatch = Column(Integer, nullable=False)
35 baby_trigger_item = Column(Unicode(12))
36
37 class EvolutionMethod(TableBase):
38 __tablename__ = 'evolution_methods'
39 id = Column(Integer, primary_key=True, nullable=False)
40 name = Column(Unicode(64), nullable=False)
41 description = Column(Unicode(255), nullable=False)
42
43 class Generation(TableBase):
44 __tablename__ = 'generations'
45 id = Column(Integer, primary_key=True, nullable=False)
46 name = Column(Unicode(16), nullable=False)
47
48 class GrowthRate(TableBase):
49 __tablename__ = 'growth_rates'
50 id = Column(Integer, primary_key=True, nullable=False)
51 name = Column(Unicode(16), nullable=False)
52 formula = Column(Unicode(255), nullable=False)
53
54 class Language(TableBase):
55 __tablename__ = 'languages'
56 id = Column(Integer, primary_key=True, nullable=False)
57 name = Column(Unicode(16), nullable=False)
58
59 class MoveEffect(TableBase):
60 __tablename__ = 'move_effects'
61 id = Column(Integer, primary_key=True, nullable=False)
62 priority = Column(SmallInteger, nullable=False)
63 short_effect = Column(Unicode(128), nullable=False)
64 effect = Column(Unicode(255), nullable=False)
65
66 class MoveTarget(TableBase):
67 __tablename__ = 'move_targets'
68 id = Column(Integer, primary_key=True, nullable=False)
69 name = Column(Unicode(32), nullable=False)
70 description = Column(Unicode(128), nullable=False)
71
72 class Move(TableBase):
73 __tablename__ = 'moves'
74 id = Column(Integer, primary_key=True, nullable=False)
75 name = Column(Unicode(12), nullable=False)
76 type_id = Column(Integer, ForeignKey('types.id'), nullable=False)
77 power = Column(SmallInteger)
78 pp = Column(SmallInteger, nullable=False)
79 accuracy = Column(SmallInteger)
80 target_id = Column(Integer, ForeignKey('move_targets.id'), nullable=False)
81 category = Column(Unicode(8), nullable=False)
82 effect_id = Column(Integer, ForeignKey('move_effects.id'), nullable=False)
83 effect_chance = Column(Integer)
84 contest_type = Column(Unicode(8), nullable=False)
85 contest_effect_id = Column(Integer, ForeignKey('contest_effects.id'), nullable=False)
86 super_contest_effect_id = Column(Integer, nullable=False)
87
88 class Pokemon(TableBase):
89 __tablename__ = 'pokemon'
90 id = Column(Integer, primary_key=True, nullable=False)
91 name = Column(Unicode(20), nullable=False)
92 forme_name = Column(Unicode(16))
93 forme_base_pokemon_id = Column(Integer, ForeignKey('pokemon.id'))
94 generation_id = Column(Integer, ForeignKey('generations.id'))
95 evolution_chain_id = Column(Integer, ForeignKey('evolution_chains.id'), nullable=False)
96 evolution_parent_pokemon_id = Column(Integer, ForeignKey('pokemon.id'))
97 evolution_method_id = Column(Integer, ForeignKey('evolution_methods.id'))
98 evolution_parameter = Column(Unicode(32))
99 height = Column(Integer, nullable=False)
100 weight = Column(Integer, nullable=False)
101 species = Column(Unicode(16), nullable=False)
102 color = Column(Unicode(6), nullable=False)
103 habitat = Column(Unicode(16), nullable=False)
104 gender_rate = Column(Integer, nullable=False)
105 capture_rate = Column(Integer, nullable=False)
106 base_experience = Column(Integer, nullable=False)
107 base_happiness = Column(Integer, nullable=False)
108 gen1_internal_id = Column(Integer)
109 is_baby = Column(Boolean, nullable=False)
110 has_dp_fem_sprite = Column(Boolean, nullable=False)
111 has_dp_fem_back_sprite = Column(Boolean, nullable=False)
112
113 class PokemonAbility(TableBase):
114 __tablename__ = 'pokemon_abilities'
115 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
116 ability_id = Column(Integer, ForeignKey('abilities.id'), nullable=False)
117 slot = Column(Integer, primary_key=True, nullable=False)
118
119 class PokemonDexNumber(TableBase):
120 __tablename__ = 'pokemon_dex_numbers'
121 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
122 generation_id = Column(Integer, ForeignKey('generations.id'), primary_key=True, nullable=False)
123 pokedex_number = Column(Integer, nullable=False)
124
125 class PokemonEggGroup(TableBase):
126 __tablename__ = 'pokemon_egg_groups'
127 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
128 egg_group_id = Column(Integer, ForeignKey('egg_groups.id'), primary_key=True, nullable=False)
129
130 class PokemonFlavorText(TableBase):
131 __tablename__ = 'pokemon_flavor_text'
132 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
133 version_id = Column(Integer, ForeignKey('versions.id'), primary_key=True, nullable=False)
134 flavor = Column(Unicode(255), nullable=False)
135
136 class PokemonName(TableBase):
137 __tablename__ = 'pokemon_names'
138 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
139 language_id = Column(Integer, ForeignKey('languages.id'), primary_key=True, nullable=False)
140 name = Column(Unicode(16), nullable=False)
141
142 class PokemonStat(TableBase):
143 __tablename__ = 'pokemon_stats'
144 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
145 stat_id = Column(Integer, ForeignKey('stats.id'), primary_key=True, nullable=False)
146 base_stat = Column(Integer, nullable=False)
147 effort = Column(Integer, nullable=False)
148
149 class PokemonType(TableBase):
150 __tablename__ = 'pokemon_types'
151 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
152 type_id = Column(Integer, ForeignKey('types.id'), nullable=False)
153 slot = Column(Integer, primary_key=True, nullable=False)
154
155 class Stat(TableBase):
156 __tablename__ = 'stats'
157 id = Column(Integer, primary_key=True, nullable=False)
158 name = Column(Unicode(16), nullable=False)
159
160 class TypeEfficacy(TableBase):
161 __tablename__ = 'type_efficacy'
162 damage_type_id = Column(Integer, ForeignKey('types.id'), primary_key=True, nullable=False)
163 target_type_id = Column(Integer, ForeignKey('types.id'), primary_key=True, nullable=False)
164 damage_factor = Column(Integer, nullable=False)
165
166 class Type(TableBase):
167 __tablename__ = 'types'
168 id = Column(Integer, primary_key=True, nullable=False)
169 name = Column(Unicode(8), nullable=False)
170 abbreviation = Column(Unicode(3), nullable=False)
171
172 class VersionGroup(TableBase):
173 __tablename__ = 'version_groups'
174 id = Column(Integer, primary_key=True, nullable=False)
175 generation_id = Column(Integer, ForeignKey('generations.id'), nullable=False)
176
177 class Version(TableBase):
178 __tablename__ = 'versions'
179 id = Column(Integer, primary_key=True, nullable=False)
180 version_group_id = Column(Integer, ForeignKey('version_groups.id'), nullable=False)
181 name = Column(Unicode(32), nullable=False)
182
183
184 ### Relations down here, to avoid ordering problems
185 Pokemon.abilities = relation(Ability, secondary=PokemonAbility.__table__,
186 order_by=PokemonAbility.slot,
187 backref='pokemon')
188 Pokemon.dex_numbers = relation(PokemonDexNumber, backref='pokemon')
189 Pokemon.evolution_chain = relation(EvolutionChain, backref='pokemon')
190 Pokemon.foreign_names = relation(PokemonName, backref='pokemon')
191 Pokemon.generation = relation(Generation, backref='pokemon')
192 Pokemon.stats = relation(PokemonStat, backref='pokemon')
193 Pokemon.types = relation(Type, secondary=PokemonType.__table__)
194
195 PokemonDexNumber.generation = relation(Generation)
196
197 PokemonName.language = relation(Language)
198
199 PokemonStat.stat = relation(Stat)
200
201 Type.damage_efficacies = relation(TypeEfficacy,
202 primaryjoin=Type.id
203 ==TypeEfficacy.damage_type_id,
204 backref='damage_type')
205 Type.target_efficacies = relation(TypeEfficacy,
206 primaryjoin=Type.id
207 ==TypeEfficacy.target_type_id,
208 backref='target_type')