[PYTHON] Ich möchte die Daten von League of Legends ③ erhalten

Stellen Sie eine Verbindung zur Datenbank her und speichern Sie Daten

Das letzte Mal konnte ich die gewünschten Daten grob extrahieren, daher möchte ich diese Daten dieses Mal in der Datenbank speichern. (Klicken Sie hier für den vorherigen Artikel https://qiita.com/mattya_527/items/9b90451e94de246525a4)

Umgebung

Stand 08.02.2020 OS:windows10 Anaconda:4.8.1 python:3.7.6 MySQL:8.0.19

Datenbankeinstellungen

Ich habe hier für die anfänglichen Einstellungen wie Installation verwiesen. (https://www.dbonline.jp/mysql/)

Datenbank erstellen

mysql -u root -p Geben Sie ein Passwort ein, um MySQL zu starten. create database loldb; Erstellen Sie eine Datenbank mit dem Namen LOLdb in. show databases; Sie können die Liste der Datenbanken unter überprüfen. OK mit LOLdb

Stellen Sie eine Verbindung zur Datenbank her

Installieren Sie zunächst die erforderlichen Module. python -m pip mysql

Ich werde den Python-Code sofort schreiben.

#Importieren Sie MySQL db
import MySQLdb 

#Stellen Sie eine Verbindung zur Datenbank her und generieren Sie den Cursor
connection = MySQLdb.connect(
    host="localhost",
    user="root",
    passwd="{Passwort in MySQL gesetzt}",
    db="LOLdb",
    charset="utf8"
    )
cursor = connection.cursor()

Sie können jetzt eine Verbindung zu der gerade erstellten Datenbank herstellen. Dann erstellen Sie die Tabelle.

#Tabelleninitialisierung
cursor.execute("DROP TABLE IF EXISTS match_data")

#Eine Tabelle erstellen
cursor.execute("""CREATE TABLE match_data(
               id INT(10) AUTO_INCREMENT NOT NULL,
               sn VARCHAR(20) NOT NULL COLLATE utf8mb4_unicode_ci,
               wol VARCHAR(20) NOT NULL COLLATE utf8mb4_unicode_ci,
               kills INT(10) NOT NULL,
               deaths INT(10) NOT NULL,
               assists INT(10) NOT NULL,
               championId  INT(10) NOT NULL,
               roles VARCHAR(20) NOT NULL COLLATE utf8mb4_unicode_ci,
               cs INT(10) NOT NULL,
               gold INT(10) NOT NULL,
               damage INT(10) NOT NULL,
               side VARCHAR(20) NOT NULL COLLATE utf8mb4_unicode_ci,
               game_time INT(10) NOT NULL,

               PRIMARY KEY(id)
               )""")

Wenn in diesem Skript eine Tabelle mit dem Namen ** match_data ** vorhanden ist, wird diese gelöscht und neu erstellt. (Wenn Sie fertig sind, kommentieren Sie diese Arbeit aus und verarbeiten Sie sie nicht.) Die Gegenstände in der Tabelle sollten diejenigen sein, die Sie das letzte Mal abgeholt haben.

#Daten hinzufügen(Prüfung)
cursor.execute("INSERT INTO match_data(sn,wol,kills,deaths,assists,championId,roles,cs,gold,damage,side,game_time) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",data)


#Anzeigen einer Datenliste
cursor.execute("SELECT * FROM match_data")
for row in cursor:
    print(row)


#Führen Sie save aus
connection.commit()
#Verbindung schließen
connection.close()

Geändert, um beim Hinzufügen zur Tabelle ** Daten ** aus der Liste zu extrahieren. Denken Sie unbedingt an ** commit () **.

Jetzt können Sie die Tabelle erstellen, hinzufügen und sogar anzeigen. Ich werde den Code der hinzuzufügenden Daten schreiben. Dazu werde ich den Code verbessern, den ich zuletzt geschrieben habe.

###Gleicher Teil wie beim letzten Mal###
from riotwatcher import RiotWatcher

API_KEY = "{Erhaltener API-SCHLÜSSEL}"
watcher = RiotWatcher(API_KEY)
region = "jp1" #Serverauswahl: Japan Saba ist jp1
name = "Macha-Kun" #Geben Sie den Namen des Beschwörers ein
summoner = watcher.summoner.by_name(region,name) #Erfassung von Spielerdaten
recentmatchlists = watcher.match.matchlist_by_account(region,summoner["accountId"]) #Holen Sie sich eine Liste der Daten für die letzten 20 Spiele
matches = recentmatchlists["matches"]
match_data = watcher.match.by_id(region,matches[0]["gameId"]) #Extrahieren Sie nur das letzte Spiel

#Der Name des Beschwörers lautet"Macha-Kun"Extrahiert den Player und gibt seine Partner-ID zurück
for i in range(10):
    match_data["participantIdentities"][i]["player"]
    if match_data["participantIdentities"][i]["player"]["summonerName"] == name: #Stimmt der Name des Beschwörers überein?
        par_Id = match_data["participants"][i]["participantId"]

###Teil bis zum letzten Mal###

###Der verbesserte Teil diesmal###
data=[] #Vorbereiten von Listendaten zum Hinzufügen zur Tabelle
data.append(name) #Name hinzufügen
# par_Geben Sie die Daten aus, die der ID entsprechen
if match_data["participants"][par_Id-1]["stats"]["participantId"] == par_Id: #par_Id-1 entspricht dem Index
    if match_data["participants"][par_Id-1]["stats"]["win"] == True:#Wenn der Gewinn oder Verlust wahr ist, gewinnen Sie,Wenn falsch, verlieren
        wol = "win"
    else:wol = "lose"
    data.append(wol) #Fügen Sie wol hinzu
    kills = match_data["participants"][par_Id-1]["stats"]["kills"] #Anzahl der Kills
    data.append(kills) #Kills hinzufügen
    deaths = match_data["participants"][par_Id-1]["stats"]["deaths"] #Anzahl der Todesfälle
    data.append(deaths) #Fügen Sie Todesfälle hinzu
    assists = match_data["participants"][par_Id-1]["stats"]["assists"] #Anzahl der Vorlagen
    data.append(assists) #Assists hinzufügen
    championId = match_data["participants"][par_Id-1]["championId"] #Champion benutzt
    data.append(championId) #ChampionId hinzufügen(Konvertieren Sie später die Champion-ID in den Champion-Namen.)
    lane = match_data["participants"][par_Id-1]["timeline"]["lane"] #Fahrbahn
    role = match_data["participants"][par_Id-1]["timeline"]["role"] #rollen
    if role == "DUO_SUPPORT": #Unterstützung
        roles = "SUP"
    elif role == "DUO_CARRY": #tragen
        roles = "ADC"
    elif role == "SOLO": #Solo Lane
        if lane == "TOP": #oben
            roles = "TOP"
        elif lane == "MIDDLE": #Mitte
            roles = "MID"
    elif role == "NONE":
        roles = "JG" #Urwald
    data.append(roles) #Rollen hinzufügen(Zunächst können Sie anhand der Rolle beurteilen, ob es sich um SUP, ADC, SOLO Lane oder Dschungel handelt. Wenn es sich um SOLO handelt, bestimmen Sie TOP oder MID.)
    cs = match_data["participants"][par_Id-1]["stats"]["totalMinionsKilled"] #CS **Gibt es etwas anderes als Schergen und Dschungelkriechen, das für CS notwendig ist, weil es für CS in OPGG nicht ausreicht?
    data.append(cs) #Fügen Sie cs hinzu
    gold = match_data["participants"][par_Id-1]["stats"]["goldEarned"] #Gold verdienen
    data.append(gold) #Gold hinzufügen
    damage = match_data["participants"][par_Id-1]["stats"]["magicDamageDealtToChampions"] + match_data["participants"][par_Id-1]["stats"]["physicalDamageDealtToChampions"] + match_data["participants"][par_Id-1]["stats"]["trueDamageDealtToChampions"] #Schaden für den Champion
    data.append(damage) #Füge Schaden hinzu
    if match_data["participants"][par_Id-1]["teamId"] == 100: #100 ist die blaue Seite, 200 ist die rote Seite
        side = "RED"
    else: side = "BLUE"
    data.append(side) #Seite hinzufügen
    game_time = match_data["gameDuration"] #Spielzeit(Sekunden)
    data.append(game_time) #game_Zeit hinzufügen(Konvertieren Sie die Spielzeit später in Minuten.)

Sie können es mit ** append () ** am Ende eines Listenelements hinzufügen. Schreiben Sie diesen Code vor den Speicherort, an dem Sie die Datenbank erstellen.

*** Ausführungsergebnis *** image.png

*** Überprüfen Sie mit MySQL *** image.png

Jetzt können Sie eine Tabelle erstellen und die Daten speichern.

Experimentieren Sie, um festzustellen, ob mehrere Daten eingegeben werden können

Auf diese Weise könnten Daten gespeichert werden, sie können jedoch nur dann als Datenbank fungieren, wenn mehrere Daten gespeichert sind. Lassen Sie uns also den Code zum Initialisieren und Erstellen der Tabelle im vorherigen Code auskommentieren und löschen.

*** Ausführungsergebnis *** image.png

Ich habe versucht, den Index der Übereinstimmung zu ändern und auszuführen, konnte ihn jedoch ordnungsgemäß speichern.

Zusammenfassung

Diesmal habe ich MySQL sehr genossen und festgestellt, dass es ziemlich einfach ist, auf der Python-Seite damit zu spielen. Ich hatte den Wunsch, die Datenbank zu studieren, aber ich konnte nicht darauf treten, also war es eine gute Gelegenheit. Von nun an möchte ich eine OPGG-ähnliche WEB-Anwendung erstellen.

Recommended Posts

Ich möchte die Daten von League of Legends ③ erhalten
Ich möchte die Daten von League of Legends ② erhalten
Ich möchte League of Legends-Daten erhalten ①
Ich möchte eine WEB-Anwendung mit den Daten von League of Legends ① erstellen
Ich möchte Betriebsinformationen über die Yahoo-Route erhalten
Keras Ich möchte die Ausgabe einer beliebigen Ebene erhalten !!
Ich möchte benutzerdefinierte Datenattribute von HTML als Elemente mit Python Selenium erhalten
Wie auch immer, ich möchte JSON-Daten einfach überprüfen
Ich möchte 100 Datenwissenschaften mit Colaboratory schlagen
Ich möchte das Erscheinungsbild von zabbix anpassen
Ich möchte den Pfad des Verzeichnisses abrufen, in dem die laufende Datei gespeichert ist.
Ich möchte den Transferstatus der 2020 J League visualisieren. Was soll ich tun?
Ich möchte Variablen / Funktionen / Klassen externer Dateien von Python abrufen / ausführen
Eine Bibliothek für Datenwissenschaft "Ich möchte das tun" auf dem Jupyter Notebook
Ich möchte Bilder von Katzen von Instagram erkennen
Ich möchte einem Pandas-Datenrahmen eine group_id geben
Ich möchte das Ausführungsergebnis von strace erfassen
Ich möchte die Grundlagen von Bokeh vollständig verstehen
Ich möchte ein Paket von Php Redis installieren
[Python] Ich habe versucht, Json von Tintenfischring 2 zu bekommen
Ich möchte sagen, dass es eine Datenvorverarbeitung gibt ~
Ich möchte die Sicherheit der SSH-Verbindung erhöhen
Ich möchte SUDOKU lösen
Ich möchte eine Python-Datenquelle in Re: Dash verwenden, um Abfrageergebnisse zu erhalten
Ich möchte Daten mit Python analysieren können (Teil 3)
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten
Ich möchte eine andere Version von Python mit pyvenv angeben
Ich möchte Daten mit Python analysieren können (Teil 1)
[Python] Ich möchte einen gemeinsamen Satz zwischen numpy erhalten
Ich möchte viele Prozesse von Python aus starten
Ich möchte Daten mit Python analysieren können (Teil 4)
Ich möchte mit GAN Schwarzweißfotos von Erinnerungen ausmalen
Ich möchte Daten mit Python analysieren können (Teil 2)
Ich möchte die Authentizität eines Elements eines numpy-Arrays bestimmen
Ich möchte die Natur von Python und Pip kennenlernen
Ich möchte die Legende der IT-Technologiewelt kennenlernen
So erhalten Sie einen Überblick über Ihre Daten in Pandas
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Ich habe die Daten von Raspberry Pi an GCP gesendet (kostenlos)
Ich möchte Importwarnungen von Pyright und pylint in VSCode entfernen
Ich möchte systemd grob verstehen
Ich möchte Bilder kratzen und trainieren
Ich möchte ○○ mit Pandas machen
Ich möchte Yolos Anmerkung kopieren
Ich möchte mit Python debuggen
[Pytorch] Ich möchte die Trainingsparameter des Modells manuell zuweisen
Ich habe versucht, mit Pandas eine Pferderenn-Datenbank zu erstellen
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ich möchte die HTML-Version der OpenCV 3.1-Version "OpenCV-Python Tutorials" lesen
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Vergleich von GCP-Computerdiensten [Ich möchte es serverlos verwenden]
Ich möchte sowohl den Schlüssel als auch den Wert des Python-Iterators verwenden
Ich habe versucht, mit Boto3 eine Liste der AMI-Namen zu erhalten
Ich möchte japanische Bestandsdaten erfassen und auflisten, ohne sie zu kratzen
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Python-Technik für diejenigen, die Anfänger loswerden wollen
Ich möchte die Bevölkerung jedes Landes der Welt kennenlernen.
[Python] Ich habe versucht, mithilfe der YouTube-Daten-API verschiedene Informationen abzurufen!
Ich möchte vertikal gehaltene Daten (langer Typ) in horizontal gehaltene Daten (breiter Typ) konvertieren.