Fixed some MySQL import problems.

Tables weren't being defined as UTF-8 if that wasn't the server default.

A lot of tables were trying to create erroneous auto_increment columns.

Foreign key checks were pretty much fucking everything up.
This commit is contained in:
Eevee 2009-03-07 18:54:01 -08:00
parent 33e659c79a
commit 20c9c23f51
3 changed files with 30 additions and 17 deletions

View File

@ -27,6 +27,12 @@ def csvimport(engine_uri, dir='.'):
metadata.create_all()
# Oh, mysql-chan.
# TODO try to insert data in preorder so we don't need this hack and won't
# break similarly on other engines
if 'mysql' in engine_uri:
session.execute('SET FOREIGN_KEY_CHECKS = 0')
# This is a secret attribute on a secret singleton of a secret class that
# appears to hopefully contain all registered classes as keys.
# There is no other way to accomplish this, as far as I can tell.
@ -50,6 +56,11 @@ def csvimport(engine_uri, dir='.'):
session.commit()
# Shouldn't matter since this is usually the end of the program and thus
# the connection too, but let's change this back just in case
if 'mysql' in engine_uri:
session.execute('SET FOREIGN_KEY_CHECKS = 1')
def csvexport(engine_uri, dir='.'):
import csv

View File

@ -15,9 +15,11 @@ def connect(uri):
if 'charset' not in uri:
uri += '?charset=utf8'
# Tables should be InnoDB, in the event that we're creating them
# Tables should be InnoDB, in the event that we're creating them, and
# use UTF-8 goddammit!
for table in metadata.tables.values():
table.kwargs['mysql_engine'] = 'InnoDB'
table.kwargs['mysql_charset'] = 'utf8'
### Connect
engine = create_engine(uri)

View File

@ -114,31 +114,31 @@ class Pokemon(TableBase):
class PokemonAbility(TableBase):
__tablename__ = 'pokemon_abilities'
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False)
ability_id = Column(Integer, ForeignKey('abilities.id'), nullable=False)
slot = Column(Integer, primary_key=True, nullable=False)
slot = Column(Integer, primary_key=True, nullable=False, autoincrement=False)
class PokemonDexNumber(TableBase):
__tablename__ = 'pokemon_dex_numbers'
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
generation_id = Column(Integer, ForeignKey('generations.id'), primary_key=True, nullable=False)
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False)
generation_id = Column(Integer, ForeignKey('generations.id'), primary_key=True, nullable=False, autoincrement=False)
pokedex_number = Column(Integer, nullable=False)
class PokemonEggGroup(TableBase):
__tablename__ = 'pokemon_egg_groups'
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
egg_group_id = Column(Integer, ForeignKey('egg_groups.id'), primary_key=True, nullable=False)
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False)
egg_group_id = Column(Integer, ForeignKey('egg_groups.id'), primary_key=True, nullable=False, autoincrement=False)
class PokemonFlavorText(TableBase):
__tablename__ = 'pokemon_flavor_text'
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
version_id = Column(Integer, ForeignKey('versions.id'), primary_key=True, nullable=False)
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)
flavor_text = Column(Unicode(255), nullable=False)
class PokemonName(TableBase):
__tablename__ = 'pokemon_names'
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
language_id = Column(Integer, ForeignKey('languages.id'), primary_key=True, nullable=False)
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False)
language_id = Column(Integer, ForeignKey('languages.id'), primary_key=True, nullable=False, autoincrement=False)
name = Column(Unicode(16), nullable=False)
class PokemonShape(TableBase):
@ -149,16 +149,16 @@ class PokemonShape(TableBase):
class PokemonStat(TableBase):
__tablename__ = 'pokemon_stats'
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
stat_id = Column(Integer, ForeignKey('stats.id'), primary_key=True, nullable=False)
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False)
stat_id = Column(Integer, ForeignKey('stats.id'), primary_key=True, nullable=False, autoincrement=False)
base_stat = Column(Integer, nullable=False)
effort = Column(Integer, nullable=False)
class PokemonType(TableBase):
__tablename__ = 'pokemon_types'
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False)
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False)
type_id = Column(Integer, ForeignKey('types.id'), nullable=False)
slot = Column(Integer, primary_key=True, nullable=False)
slot = Column(Integer, primary_key=True, nullable=False, autoincrement=False)
class Stat(TableBase):
__tablename__ = 'stats'
@ -167,8 +167,8 @@ class Stat(TableBase):
class TypeEfficacy(TableBase):
__tablename__ = 'type_efficacy'
damage_type_id = Column(Integer, ForeignKey('types.id'), primary_key=True, nullable=False)
target_type_id = Column(Integer, ForeignKey('types.id'), primary_key=True, nullable=False)
damage_type_id = Column(Integer, ForeignKey('types.id'), primary_key=True, nullable=False, autoincrement=False)
target_type_id = Column(Integer, ForeignKey('types.id'), primary_key=True, nullable=False, autoincrement=False)
damage_factor = Column(Integer, nullable=False)
class Type(TableBase):