def updateWeapons(): working_file = os.path.join('data', 'weapons.json') images_file = os.path.join('data', 'weapons.images') images_dir = os.path.join('..', FRONTEND_DIR, 'src', 'img', 'weapon_skills') values = [] ougis = [] skills = [] skills_desc = {} skills_desc_regex = re.compile('([a-z]+) boost ') weapon_ids = set() with open(working_file, "r", encoding='utf8') as read_file, open(images_file, 'w', encoding='utf8') as images_file: data = json.load(read_file) add_element = set() for weapon in data: if weapon['id'].endswith('_note'): add_element.add(weapon['name']) for weapon in data: # Filter weird data if weapon['id'].endswith('_note'): continue # Image images_file.write('wget -nc http://game-a.granbluefantasy.jp/assets_en/img_mid/sp/assets/weapon/m/' + weapon['id'] + '.jpg -O ./weapon/' + weapon['id'] + '.jpg\n') weapon_id = weapon['id'][:-2] weapon_ids.add(int(weapon_id)) name = defines.unescape(weapon['name']) if name in add_element: name += ' (' + weapon['element'][0].upper() + weapon['element'][1:] + ')' # Check missing Atk and HP values if int(weapon['evo max']) == 5: if int(weapon['atk4']) == 0: print('[ERR] atk4 missing for', name, weapon_id) if int(weapon['hp4']) == 0: print('[ERR] hp4 missing for', name, weapon_id) if int(weapon['evo max']) >= 4: if int(weapon['atk3']) == 0: if weapon_id not in defines.IGNORE_MISSING_WEAPON_STATS: print('[WARN] atk3 missing for', name, weapon_id) weapon['atk3'] = int(weapon['atk1']) + int(weapon['atk2']) if int(weapon['hp3']) == 0: if weapon_id not in defines.IGNORE_MISSING_WEAPON_STATS: print('[WARN] hp3 missing for', name, weapon_id) weapon['hp3'] = int(weapon['hp1']) + int(weapon['hp2']) if int(weapon['evo max']) >= 3: if int(weapon['atk2']) == 0: if int(weapon['atk3']) > 0 and int(weapon['atk1']) > 0: weapon['atk2'] = int(weapon['atk3']) - int(weapon['atk1']) else: print('[ERR] atk2 missing for', name, weapon_id) if int(weapon['hp2']) == 0: if int(weapon['hp3']) > 0 and int(weapon['hp1']) > 0: weapon['hp2'] = int(weapon['hp3']) - int(weapon['hp1']) else: print('[ERR] hp2 missing for', name, weapon_id) if int(weapon['atk1']) == 0: print('[ERR] atk1 missing for', name, weapon_id) if int(weapon['hp1']) == 0: print('[ERR] hp1 missing for', name, weapon_id) # Base infos values += [(weapon_id, name, weapon['jpname'], weapon['evo base'], weapon['evo max'], defines.getValue(weapon['rarity'], defines.RARITIES), defines.getValue(weapon['element'], defines.ELEMENTS), defines.getValue(weapon['type'], defines.WEAPONTYPES), int(weapon['atk1']), int(weapon['atk2']), int(weapon['atk3']), int(weapon['atk4']), int(weapon['hp1']), int(weapon['hp2']), int(weapon['hp3']), int(weapon['hp4']) )] # Ougi ougis += [(weapon_id, parseDescription(weapon['ca1 desc']), parseDescription(weapon['ca2 desc']), parseDescription(weapon['ca3 desc']))] # Icons for (s, i) in [('s1 ', 1), ('s1u1 ', 1), ('s2 ', 2), ('s2u1 ', 2), ('s3 ', 3), ('s3u1 ', 3)]: skillname = weapon[s + 'name'].strip().replace(' ', ' ') # Ignore skills with no names. Sometimes, they have non-existing icons... if len(skillname) > 0 and len(weapon[s + 'icon']) > 0: icon = weapon[s + 'icon'].lower().replace(' ', '_') downloadSkillIcon(images_dir, icon) skill_key = defines.getWeaponSkillKey(int(weapon_id), i) if skill_key != None: for key_image in defines.WEAPONS_KEYS_ICONS[skill_key]: downloadSkillIcon(images_dir, key_image) skill_lvl = defines.toInt(weapon[s + 'lvl']) if s == 's1u1 ' and skill_lvl == 1: skill_lvl = 101 # Description skill_desc = parseDescription(weapon[s + 'desc']) # Test boost type in descriptions regex_result = skills_desc_regex.match(skill_desc.lower()) boost = None if regex_result: boost = regex_result.group(1) boost_key = skillname + icon if not boost_key in skills_desc: skills_desc[boost_key] = boost if boost not in defines.BOOST_TYPES: print('[WARN] Unknown boost type', boost, 'for skill', skillname) elif skills_desc[boost_key] != boost: print('[ERR] Multiple descriptions for a skill:', skillname, skills_desc[boost_key], boost) # To clear orphaned skills: # DELETE FROM Weapon_Skilldata # WHERE Weapon_Skilldata.skilldataid IN (SELECT Weapon_Skilldata.skilldataid # FROM Weapon_Skilldata # FULL JOIN Weapon_Skill # ON Weapon_Skilldata.skilldataid = Weapon_Skill.skilldataid # WHERE Weapon_Skilldata.skilldataid IS NULL OR Weapon_Skill.skilldataid IS NULL) # Get skilldata id skilldataId = database.dico_tables.get('Weapon_SkillData').getCount() skilldata = [(skilldataId, icon, skillname, None, boost)] skilldataId = database.dico_tables.get('Weapon_SkillData').insert(skilldata, returning="skilldataId") skills += [(weapon_id, i, skill_lvl, skill_key, skilldataId, skill_desc)] if addToDB: print('Updating Database...') database.dico_tables.get('Weapon_Skill').drop() database.dico_tables.get('Weapon_Ougi').drop() database.dico_tables.get('Weapon').drop() database.dico_tables.get('Weapon').insert(values) database.dico_tables.get('Weapon_Ougi').insert(ougis) database.dico_tables.get('Weapon_Skill').insert(skills) orphans = database.dico_tables.get('Weapon').getOrphans(weapon_ids, 'weaponId') database.dico_tables.get('Weapon_Skill').removeOrphans(orphans, 'weaponId') database.dico_tables.get('Weapon').removeOrphans(orphans, 'weaponId') if verbose: print(values) print(skills) print(ougis)
def updateCharacters(): cache_dir = os.path.join(os.getcwd(), 'data', 'cache') images_file = os.path.join('data', 'characters.images') images_dir = os.path.join('..', FRONTEND_DIR, 'src', 'img', 'chara_skills') values = [] weaponspec_values = [] skills = [] skin_values = [] ougi_values = [] with open(os.path.join('data', 'characters_category.json'), 'r', encoding='utf8') as fd, open(images_file, 'w', encoding='utf8') as images_file: data = json.load(fd) for unit in data: page_id = str(unit['pageid']) name = '' try: with open(os.path.join(cache_dir, page_id + '.page'), 'r', encoding='utf8') as page_file: template = None skins = [] for t in mwparserfromhell.parse(page_file.read()).filter_templates(): if t.name.matches('Character'): template = t elif t.name.matches('CharSkin'): skins.append(getTemplateValue(t, 'id')[:-3]) # Images images_file.write('wget -nc http://game-a.granbluefantasy.jp/assets_en/img/sp/assets/npc/quest/' + getTemplateValue(template, 'id') + '_01.jpg -O ./unit/' + getTemplateValue(template, 'id') + '.jpg\n') images_file.write('wget -nc http://game-a.granbluefantasy.jp/assets_en/img_mid/sp/assets/npc/m/' + getTemplateValue(template, 'id') + '_01.jpg -O ./unit_small/' + getTemplateValue(template, 'id') + '.jpg\n') character_id = getTemplateValue(template, 'id')[:-3] name = defines.unescape(unit['title']) rarity = defines.getValue(getTemplateValue(template, 'rarity'), defines.RARITIES) element = defines.getValue(getTemplateValue(template, 'element'), defines.ELEMENTS) chara_type = defines.getValue(getTemplateValue(template, 'type'), defines.CHARATYPES) # TODO Deal with multi-race characters race = getTemplateValue(template, 'race').split(',')[0] if race == 'Other': race = 'Unknown' race = defines.getValue(race, defines.RACES) # Obtain recruit_id = None recruit = getTemplateValue(template, 'join') if recruit: if character_id in defines.CHARA_EVOKERS: recruit = 'Evoker' elif character_id in defines.CHARA_ETERNALS: recruit = 'Eternal' elif 'Valentine Premium Draw' in recruit: recruit = 'Valentine Premium Draw' elif 'Holiday Premium Draw' in recruit: recruit = 'Holiday Premium Draw' elif 'Summer Premium Draw' in recruit or getTemplateValue(template, 'obtain') == 'premium,swimsuit': recruit = 'Summer Premium Draw' elif 'Halloween Premium Draw' in recruit: recruit = 'Halloween Premium Draw' elif 'Zodiac Character' in recruit: recruit = 'Zodiac Premium Draw' elif 'Premium Gala' in recruit: recruit = 'Premium Gala' if recruit in defines.OBTAIN: recruit_id = defines.OBTAIN[recruit] # Check missing Atk and HP values if int(getTemplateValue(template, 'max_evo')) == 5: if getTemplateValueOrNone(template, 'flb_atk') == None: print('[WARN] flb_atk missing for', name, page_id) if getTemplateValueOrNone(template, 'flb_hp') == None: print('[WARN] flb_hp missing for', name, page_id) if int(getTemplateValue(template, 'max_evo')) >= 4: if getTemplateValueOrNone(template, 'max_atk') == None: print('[WARN] max_atk missing for', name, page_id) if getTemplateValueOrNone(template, 'max_hp') == None: print('[WARN] max_hp missing for', name, page_id) values += [(character_id, name, getTemplateValueOrDefault(template, 'jpname', ''), getTemplateValue(template, 'base_evo'), getTemplateValue(template, 'max_evo'), rarity, element, chara_type, race, recruit_id, getTemplateValue(template, 'release_date'), getTemplateValueOrNone(template, 'max_atk'), getTemplateValueOrNone(template, 'flb_atk'), getTemplateValueOrNone(template, 'max_hp'), getTemplateValueOrNone(template, 'flb_hp'), getTemplateValueOrNone(template, 'join_weapon') )] # Weapons for weapon in getTemplateValue(template, 'weapon').split(','): weaponspec_values += [(character_id, defines.getValue(weapon.strip(), defines.WEAPONTYPES))] # Skills for i in range(1, 5): if template.has('a' + str(i) + '_name'): skill_name = getTemplateValue(template, 'a' + str(i) + '_name') if skill_name: skill_name = mwparserfromhell.parse(skill_name.replace('<br />', ' ')).filter_text()[-1].strip() skill_icon = getTemplateValue(template, 'a' + str(i) + '_icon').split(',')[0] skill_desc = parseDescription(getTemplateValue(template, 'a' + str(i) + '_effdesc')) skill_obtain = mwparserfromhell.parse(getTemplateValue(template, 'a' + str(i) + '_oblevel')).filter_templates() if len(skill_obtain) > 0: skill_template = None for st in skill_obtain: if st.name.matches('InfoOb'): skill_template = st break if skill_template == None: print('[ERR] Skill', skill_name, 'for', name, 'id:', page_id, 'has no InfoOb') skill_obtain = 1 else: skill_obtain = int(getTemplateValue(skill_template, 'obtained')) if skill_obtain < 1 or skill_obtain > 100: print('[ERR] Skill', skill_name, 'for', name, 'id:', page_id, 'has incorrect value', skill_obtain) else: if page_id not in defines.IGNORE_MISSING_SKILL: print('[WARN] Skill', skill_name, 'for', name, 'id:', page_id, 'has no obtain level') skill_obtain = 1 skills += [(character_id, i-1, skill_name, skill_obtain, skill_desc)] # Look for skill img skill_filename = os.path.join(images_dir, str(character_id) + '_' + str(i-1) + '.png') if not os.path.isfile(skill_filename): skill_url = getImageURL(skill_icon) print("Writing", skill_url, 'to', skill_filename) r = sessionGet(skill_url) with open(skill_filename, 'wb') as image_file: image_file.write(r.content) # Skins for s in skins: skin_values.append([s, character_id]) # Ougi ougi_name = getTemplateValue(template, 'ougi_name') if len(ougi_name) > 0: ougi_label = parseDescription(getTemplateValueOrDefault(template, 'ougi_label', '')) ougi_desc = parseDescription(getTemplateValueOrDefault(template, 'ougi_desc', '')) ougi_values += [(character_id, 1, ougi_name, ougi_label + ' ' + ougi_desc)] ougi_name = getTemplateValueOrDefault(template, 'ougi2_name', '') if len(ougi_name) > 0: ougi_label = parseDescription(getTemplateValueOrDefault(template, 'ougi2_label', '')) ougi_desc = parseDescription(getTemplateValueOrDefault(template, 'ougi2_desc', '')) ougi_values += [(character_id, 2, ougi_name, ougi_label + ' ' + ougi_desc)] ougi_name = getTemplateValueOrDefault(template, 'ougi3_name', '') if len(ougi_name) > 0: ougi_label = parseDescription(getTemplateValueOrDefault(template, 'ougi3_label', '')) ougi_desc = parseDescription(getTemplateValueOrDefault(template, 'ougi3_desc', '')) ougi_values += [(character_id, 3, ougi_name, ougi_label + ' ' + ougi_desc)] ougi_name = getTemplateValueOrDefault(template, 'ougi4_name', '') if len(ougi_name) > 0: ougi_label = parseDescription(getTemplateValueOrDefault(template, 'ougi4_label', '')) ougi_desc = parseDescription(getTemplateValueOrDefault(template, 'ougi4_desc', '')) ougi_values += [(character_id, 4, ougi_name, ougi_label + ' ' + ougi_desc)] except Exception as e: raise type(e)(str(e) + ' happens for %s (%s)' % (name, page_id)).with_traceback(sys.exc_info()[2]) if addToDB: print('Updating Character table...') database.dico_tables.get('WeaponSpecialty').drop() database.dico_tables.get('Character').drop() database.dico_tables.get('Character').insert(values) database.dico_tables.get('WeaponSpecialty').insert(weaponspec_values) database.dico_tables.get('CharacterSkill').drop() database.dico_tables.get('CharacterSkill').insert(skills) database.dico_tables.get('Skin_Character').drop() database.dico_tables.get('Skin_Character').insert(skin_values) database.dico_tables.get('CharacterOugi').drop() database.dico_tables.get('CharacterOugi').insert(ougi_values) if verbose: print(values) print(weaponspec_values) print(ougi_values)
def updateSummons(): cache_dir = os.path.join(os.getcwd(), 'data', 'cache') working_file = os.path.join('data', 'summons_category.json') images_file = os.path.join('data', 'summons.images') values = [] auras = [] with open(working_file, "r", encoding='utf8') as read_file, open(images_file, 'w', encoding='utf8') as images_file: data = json.load(read_file) for summon in data: page_id = str(summon['pageid']) page_title = summon['title'] if page_title.endswith(' List') or page_title.startswith('Category:'): continue with open(os.path.join(cache_dir, page_id + '.page'), 'r', encoding='utf8') as page_file: template = None for t in mwparserfromhell.parse(page_file.read()).filter_templates(): if t.name.matches('Summon'): template = t break summon_id = getTemplateValue(template, 'id')[:-3] rarity = getTemplateValue(template, 'rarity') # Filter Seraphim Cradle / Archangel Queen if summon_id == '2040199' or summon_id == '2030017': continue # Filter normal and rare if rarity == 'n' or rarity == 'r': continue # Images images_file.write('wget -nc http://game-a.granbluefantasy.jp/assets_en/img_mid/sp/assets/summon/party_sub/' + getTemplateValue(template, 'id') + '.jpg -O ./unit/' + getTemplateValue(template, 'id') + '.jpg\n') images_file.write('wget -nc http://game-a.granbluefantasy.jp/assets_en/img_mid/sp/assets/summon/m/' + getTemplateValue(template, 'id') + '.jpg -O ./unit_small/' + getTemplateValue(template, 'id') + '.jpg\n') # How to obtain obtain = None obtainValue = getTemplateValue(template, 'obtain') if obtainValue.startswith("premium"): if obtainValue == 'premium,normal': obtain = defines.OBTAIN['[[Premium Draw]]'] elif obtainValue == 'premium,summer' or obtainValue == 'premium,swimsuit': obtain = defines.OBTAIN['Summer Premium Draw'] elif obtainValue == 'premium,non-ticketable': obtain = defines.OBTAIN['Premium Gala'] elif obtainValue == 'premium,holiday': obtain = defines.OBTAIN['Holiday Premium Draw'] else: print('Unknown premium value for summon ' + getTemplateValue(template, 'name') + ': ' + obtainValue) elif summon_id in defines.SUMMON_EVOKERS: obtain = defines.OBTAIN['Evoker'] release_date = getTemplateValue(template, 'release_date') if len(release_date) < 1: release_date = None name = defines.unescape(getTemplateValue(template, 'name')) if name.startswith('[Skybound] '): name = name.replace('[Skybound] ', '') elif name == '{{PAGENAME}}': name = page_title elif summon_id == '2040335': name += ' (Summer)' if name.find('<!--') > 0: name = name[:name.find('<!--')] # Check missing Atk and HP values if int(getTemplateValue(template, 'max_evo')) == 5: if getTemplateValueOrNone(template, 'atk4') == None: print('[WARN] atk4 missing for', name, page_id) if getTemplateValueOrNone(template, 'hp4') == None: print('[WARN] hp4 missing for', name, page_id) if int(getTemplateValue(template, 'max_evo')) >= 4: if getTemplateValueOrNone(template, 'atk3') == None: print('[WARN] atk3 missing for', name, page_id) if getTemplateValueOrNone(template, 'hp3') == None: print('[WARN] hp3 missing for', name, page_id) if int(getTemplateValue(template, 'max_evo')) >= 3: if getTemplateValueOrNone(template, 'atk2') == None: print('[WARN] atk2 missing for', name, page_id) if getTemplateValueOrNone(template, 'hp2') == None: print('[WARN] hp2 missing for', name, page_id) if getTemplateValueOrNone(template, 'atk1') == None: print('[WARN] atk1 missing for', name, page_id) if getTemplateValueOrNone(template, 'hp1') == None: print('[WARN] hp1 missing for', name, page_id) # Values values += [(summon_id, name, getTemplateValue(template, 'jpname'), getTemplateValue(template, 'base_evo'), getTemplateValue(template, 'max_evo'), defines.getValue(rarity, defines.RARITIES), defines.getValue(getTemplateValue(template, 'element'), defines.ELEMENTS), obtain, release_date, getTemplateValueOrNone(template, 'atk1'), getTemplateValueOrNone(template, 'atk2'), getTemplateValueOrNone(template, 'atk3'), getTemplateValueOrNone(template, 'atk4'), getTemplateValueOrNone(template, 'hp1'), getTemplateValueOrNone(template, 'hp2'), getTemplateValueOrNone(template, 'hp3'), getTemplateValueOrNone(template, 'hp4'), None )] # Auras if not page_id in defines.IGNORE_MISSING_AURA: if int(getTemplateValue(template, 'max_evo')) == 5: if getTemplateValueOrNone(template, 'aura4') == None: print('[WARN] aura4 missing for', name, page_id) if int(getTemplateValue(template, 'max_evo')) >= 4: if getTemplateValueOrNone(template, 'aura3') == None: print('[WARN] aura3 missing for', name, page_id) if int(getTemplateValue(template, 'max_evo')) >= 3: if getTemplateValueOrNone(template, 'aura2') == None: print('[WARN] aura2 missing for', name, page_id) auras += [(summon_id, parseDescription(getTemplateValueOrNone(template, 'aura1')), parseDescription(getTemplateValueOrNone(template, 'aura2')), parseDescription(getTemplateValueOrNone(template, 'aura3')), parseDescription(getTemplateValueOrNone(template, 'aura4')), parseDescription(getTemplateValueOrNone(template, 'subaura1')), parseDescription(getTemplateValueOrNone(template, 'subaura2')), parseDescription(getTemplateValueOrNone(template, 'subaura3')), parseDescription(getTemplateValueOrNone(template, 'subaura4')), False )] if addToDB: print('Updating Summon table...') database.dico_tables.get('SummonAura').drop() database.dico_tables.get('Summon').drop() database.dico_tables.get('Summon').insert(values) database.dico_tables.get('SummonAura').insert(auras) if verbose: print(values)
def updateWeapons(): working_file = os.path.join('data', 'weapons.json') images_file = os.path.join('data', 'weapons.images') images_dir = os.path.join('..', FRONTEND_DIR, 'src', 'img', 'weapon_skills') values = [] skills = [] with open(working_file, "r") as read_file, open(images_file, 'w', encoding='utf8') as images_file: data = json.load(read_file) add_element = set() for weapon in data: if weapon['id'].endswith('_note'): add_element.add(weapon['name']) for weapon in data: # Filter weird data if weapon['id'].endswith('_note'): continue # Image images_file.write( 'wget -nc http://game-a.granbluefantasy.jp/assets_en/img_mid/sp/assets/weapon/m/' + weapon['id'] + '.jpg -O ./weapon/' + weapon['id'] + '.jpg\n') weapon_id = weapon['id'][:-2] name = defines.unescape(weapon['name']) if name in add_element: name += ' (' + weapon['element'][0].upper( ) + weapon['element'][1:] + ')' # Check missing Atk and HP values if int(weapon['evo max']) == 5: if int(weapon['atk4']) == 0: print('[ERR] atk4 missing for', name, weapon_id) if int(weapon['hp4']) == 0: print('[ERR] hp4 missing for', name, weapon_id) if int(weapon['evo max']) >= 4: if int(weapon['atk3']) == 0: if weapon_id not in defines.IGNORE_MISSING_WEAPON_STATS: print('[WARN] atk3 missing for', name, weapon_id) weapon['atk3'] = int(weapon['atk1']) + int(weapon['atk2']) if int(weapon['hp3']) == 0: if weapon_id not in defines.IGNORE_MISSING_WEAPON_STATS: print('[WARN] hp3 missing for', name, weapon_id) weapon['hp3'] = int(weapon['hp1']) + int(weapon['hp2']) if int(weapon['evo max']) >= 3: if int(weapon['atk2']) == 0: if int(weapon['atk3']) > 0 and int(weapon['atk1']) > 0: weapon['atk2'] = int(weapon['atk3']) - int( weapon['atk1']) else: print('[ERR] atk2 missing for', name, weapon_id) if int(weapon['hp2']) == 0: if int(weapon['hp3']) > 0 and int(weapon['hp1']) > 0: weapon['hp2'] = int(weapon['hp3']) - int(weapon['hp1']) else: print('[ERR] hp2 missing for', name, weapon_id) if int(weapon['atk1']) == 0: print('[ERR] atk1 missing for', name, weapon_id) if int(weapon['hp1']) == 0: print('[ERR] hp1 missing for', name, weapon_id) # Base infos values += [(weapon_id, name, weapon['jpname'], weapon['evo base'], weapon['evo max'], defines.getValue(weapon['rarity'], defines.RARITIES), defines.getValue(weapon['element'], defines.ELEMENTS), defines.getValue(weapon['type'], defines.WEAPONTYPES), int(weapon['atk1']), int(weapon['atk2']), int(weapon['atk3']), int(weapon['atk4']), int(weapon['hp1']), int(weapon['hp2']), int(weapon['hp3']), int(weapon['hp4']))] # Icons for (s, i) in [('s1 ', 1), ('s1u1 ', 1), ('s2 ', 2), ('s2u1 ', 2), ('s3 ', 3), ('s3u1 ', 3)]: if len(weapon[s + 'icon']) > 0: icon = weapon[s + 'icon'].lower().replace(' ', '_') downloadSkillIcon(images_dir, icon) skill_key = defines.getWeaponSkillKey(int(weapon_id), i) if skill_key != None: for key_image in defines.WEAPONS_KEYS_ICONS[skill_key]: downloadSkillIcon(images_dir, key_image) skill_lvl = defines.toInt(weapon[s + 'lvl']) if s == 's1u1 ' and skill_lvl == 1: skill_lvl = 101 skillname = weapon[s + 'name'].strip().replace(' ', ' ') # To clear orphaned skills: # DELETE FROM Weapon_Skilldata # WHERE Weapon_Skilldata.skilldataid IN (SELECT Weapon_Skilldata.skilldataid # FROM Weapon_Skilldata # FULL JOIN Weapon_Skill # ON Weapon_Skilldata.skilldataid = Weapon_Skill.skilldataid # WHERE Weapon_Skilldata.skilldataid IS NULL OR Weapon_Skill.skilldataid IS NULL) # Get skilldata id skilldataId = database.dico_tables.get( 'Weapon_SkillData').getCount() skilldata = [(skilldataId, icon, skillname, None)] skilldataId = database.dico_tables.get( 'Weapon_SkillData').insert(skilldata, returning="skilldataId") skills += [(weapon_id, i, skill_lvl, skill_key, skilldataId)] if addToDB: print('Updating Database...') database.dico_tables.get('Weapon_Skill').drop() database.dico_tables.get('Weapon').drop() database.dico_tables.get('Weapon').insert(values) database.dico_tables.get('Weapon_Skill').insert(skills) if verbose: print(values) print(skills)