e738c0d38fc8723a1d27eb5eb5a62814aee44ed3
[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 evolution_chain_id = Column(Integer, ForeignKey('evolution_chains.id'), nullable=False)
95 evolution_parent_pokemon_id = Column(Integer, ForeignKey('pokemon.id'))
96 evolution_method_id = Column(Integer, ForeignKey('evolution_methods.id'))
97 evolution_parameter = Column(Unicode(32))
98 height = Column(Integer, nullable=False)
99 weight = Column(Integer, nullable=False)
100 species = Column(Unicode(16), nullable=False)
101 color = Column(Unicode(6), nullable=False)
102 habitat = Column(Unicode(16), nullable=False)
103 gender_rate = Column(Integer, nullable=False)
104 capture_rate = Column(Integer, nullable=False)
105 base_experience = Column(Integer, nullable=False)
106 base_happiness = Column(Integer, nullable=False)
107 gen1_internal_id = Column(Integer)
108 is_baby = Column(Boolean, nullable=False)
109 has_dp_fem_sprite = Column(Boolean, nullable=False)
110 has_dp_fem_back_sprite = Column(Boolean, nullable=False)
111
112 class PokemonAbility(TableBase):
113 __tablename__ = 'pokemon_abilities'
114 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
115 ability_id = Column(Integer, ForeignKey('abilities.id'), nullable=False)
116 slot = Column(Integer, primary_key=True, nullable=False)
117
118 class PokemonDexNumber(TableBase):
119 __tablename__ = 'pokemon_dex_numbers'
120 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
121 generation_id = Column(Integer, ForeignKey('generations.id'), primary_key=True, nullable=False)
122 pokedex_number = Column(Integer, nullable=False)
123
124 class PokemonEggGroup(TableBase):
125 __tablename__ = 'pokemon_egg_groups'
126 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
127 egg_group_id = Column(Integer, ForeignKey('egg_groups.id'), primary_key=True, nullable=False)
128
129 class PokemonFlavorText(TableBase):
130 __tablename__ = 'pokemon_flavor_text'
131 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
132 version_id = Column(Integer, ForeignKey('versions.id'), primary_key=True, nullable=False)
133 flavor = Column(Unicode(255), nullable=False)
134
135 class PokemonName(TableBase):
136 __tablename__ = 'pokemon_names'
137 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
138 language_id = Column(Integer, ForeignKey('languages.id'), primary_key=True, nullable=False)
139 name = Column(Unicode(16), nullable=False)
140
141 class PokemonStat(TableBase):
142 __tablename__ = 'pokemon_stats'
143 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
144 stat_id = Column(Integer, ForeignKey('stats.id'), primary_key=True, nullable=False)
145 base_stat = Column(Integer, nullable=False)
146 effort = Column(Integer, nullable=False)
147
148 class PokemonType(TableBase):
149 __tablename__ = 'pokemon_types'
150 pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
151 type_id = Column(Integer, ForeignKey('types.id'), nullable=False)
152 slot = Column(Integer, primary_key=True, nullable=False)
153
154 class Stat(TableBase):
155 __tablename__ = 'stats'
156 id = Column(Integer, primary_key=True, nullable=False)
157 name = Column(Unicode(16), nullable=False)
158
159 class TypeEfficacy(TableBase):
160 __tablename__ = 'type_efficacy'
161 damage_type_id = Column(Integer, ForeignKey('types.id'), primary_key=True, nullable=False)
162 target_type_id = Column(Integer, ForeignKey('types.id'), primary_key=True, nullable=False)
163 damage_factor = Column(Integer, nullable=False)
164
165 class Type(TableBase):
166 __tablename__ = 'types'
167 id = Column(Integer, primary_key=True, nullable=False)
168 name = Column(Unicode(8), nullable=False)
169 abbreviation = Column(Unicode(3), nullable=False)
170
171 class VersionGroup(TableBase):
172 __tablename__ = 'version_groups'
173 id = Column(Integer, primary_key=True, nullable=False)
174 generation_id = Column(Integer, ForeignKey('generations.id'), nullable=False)
175
176 class Version(TableBase):
177 __tablename__ = 'versions'
178 id = Column(Integer, primary_key=True, nullable=False)
179 version_group_id = Column(Integer, ForeignKey('version_groups.id'), nullable=False)
180 name = Column(Unicode(32), nullable=False)
181
182
183 ### Relations down here, to avoid ordering problems
184 Pokemon.types = relation(Type, secondary=PokemonType.__table__)