示例#1
0
def bulk_import_players(players):
    """
    Given a list of player data, bulk import into database.

    Since team import also brings in players, we are more cautious here as
    we don't want to disrupt those connections. Therefor, this import process
    only creates and updates existing player objects. 

    Arguments:
    players -- List of team data derived from team CSV sheet. (list)
    """
    pass
    player_count = {'created': 0, 'updated': 0}
    alias_count = {'created': 0, 'updated': 0, 'deleted': 0, 'skipped': 0}

    for entry in players:   
        
        # Skip bogus data
        if not entry['primary_in-game_name']:
            continue

        # Locate existing player object, ignoring case.
        player = Player.objects.filter(
            name__iexact=entry['player_name']).first()

        if player:
            player_count['updated'] += 1

        # Create (but don't commit) player object if not found 
        else:
            player = Player()
            player.name = entry['player_name']
            player_count['created'] += 1
                    
        player.name_phonetic =  entry['phoentic']
        player.pronouns = entry['pronouns']
        player.discord_username = entry['discord_id']
        player.twitch_username = entry['twitch_id']            
        player.save()  

        # Set primary in-game name
        primary_alias = player.aliases.filter(is_primary=True).first()

        if primary_alias:
            if primary_alias.name != entry['primary_in-game_name']:
                primary_alias.name = entry['primary_in-game_name']
                primary_alias.save()
                alias_count['updated'] += 1

        # If primary in game name field completed, set as main alias
        elif entry['primary_in-game_name']:
            Alias.objects.create(
                player=player,
                name=entry['primary_in-game_name'],
                is_primary=True
            )
            alias_count['created'] += 1
        
        # If not, just use player name record as primary alias
        else:
            Alias.objects.create(
                player=player,
                name=player.name,
                is_primary=True
            )
            alias_count['created'] += 1
        
        # Set secondary alts
        secondary_aliases = entry['secondary_alts'].split(',')
        secondary_aliases = [x for x in secondary_aliases if x] # Weed out empty

        for alt in secondary_aliases:
            
            # Skip garbage entries
            if alt.lower() in ['none']:
                continue 
            
            alias = Alias.objects.filter(name__iexact=alt, player=player, is_primary=False).first()

            if alias:
                alias.name = alt
                alias.save()
                alias_count['updated'] += 1
            else:
                try:
                    Alias.objects.create(name=alt, player=player, is_primary=False)
                    alias_count['updated'] += 1
                except IntegrityError:
                    alias_count['skipped'] += 1

    return {'players': player_count, 'aliases': alias_count}
#!/usr/bin/env python
import os, sys
import csv

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "allstars.settings")

from players.models import Player, AllStarTeamMember

if __name__ == "__main__":
    player_data = csv.DictReader(open('lahman58-csv/Master.csv', 'r'))
    for player in player_data:
        
        p = Player()
        p.name = "{0} {1}".format(player['nameFirst'], player['nameLast'])
        p.player_id = player['playerID']
        if player['weight']:
            p.weight = int(player['weight'])
        if player['birthYear']:
            p.birth_year = int(player['birthYear'])
        p.save()

    team_data = csv.DictReader(open('lahman58-csv/Allstar.csv', 'r'))
    for team_player in team_data:
        player = Player.objects.get(player_id=team_player['playerID'])
        AllStarTeamMember.objects.create(
                player = player,
                year = int(team_player['yearID']),
                league = team_player['lgID'],
                )