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 *
8 TableBase
= declarative_base(metadata
=metadata
)
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)
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)
25 class EggGroup(TableBase
):
26 __tablename__
= 'egg_groups'
27 id = Column(Integer
, primary_key
=True, nullable
=False)
28 name
= Column(Unicode(16), nullable
=False)
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))
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)
43 class Generation(TableBase
):
44 __tablename__
= 'generations'
45 id = Column(Integer
, primary_key
=True, nullable
=False)
46 name
= Column(Unicode(16), nullable
=False)
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)
54 class Language(TableBase
):
55 __tablename__
= 'languages'
56 id = Column(Integer
, primary_key
=True, nullable
=False)
57 name
= Column(Unicode(16), nullable
=False)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
155 class Stat(TableBase
):
156 __tablename__
= 'stats'
157 id = Column(Integer
, primary_key
=True, nullable
=False)
158 name
= Column(Unicode(16), nullable
=False)
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)
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)
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)
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)
184 ### Relations down here, to avoid ordering problems
185 Pokemon
.abilities
= relation(Ability
, secondary
=PokemonAbility
.__table__
,
186 order_by
=PokemonAbility
.slot
,
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__
)
195 PokemonDexNumber
.generation
= relation(Generation
)
197 PokemonName
.language
= relation(Language
)
199 PokemonStat
.stat
= relation(Stat
)
201 Type
.damage_efficacies
= relation(TypeEfficacy
,
203 ==TypeEfficacy
.damage_type_id
,
204 backref
='damage_type')
205 Type
.target_efficacies
= relation(TypeEfficacy
,
207 ==TypeEfficacy
.target_type_id
,
208 backref
='target_type')