J'essaie de créer une table qui enregistre le nombre de fois qu'un joueur s'est connecté, par UUID et le nombre de jointures.

Voici à quoi ressemble ma table (pour tester)

Je voudrais que mon programme vérifie si l'UUID est déjà dans la base de données, puis ajoute 1 au nombre de jointures.

import sqlite3

connection = sqlite3.connect("joins.db")
cursor = connection.cursor()
try:
    cursor.execute("CREATE TABLE joinsdatabase (uuid TEXT, joins INTEGER)")
except:
    print("Table exists: Not creating a new one!")

def addP(player_uuid):
    rows = cursor.execute("SELECT uuid, joins FROM joinsdatabase").fetchall()
    cursor.execute("INSERT INTO joinsdatabase VALUES ('"+player_uuid+"', 1)")
    connection.commit()
1
Final 24 janv. 2021 à 15:31

2 réponses

Meilleure réponse

Si votre version de SQLite est 3.24.0+, vous pouvez utiliser UPSERT, mais vous devez d'abord définir la colonne uuid comme PRIMARY KEY ou UNIQUE. Alors laissez tomber la table que vous avez avec:

DROP TABLE joinsdatabase;

Puis recréez-le:

CREATE TABLE joinsdatabase (uuid TEXT PRIMARY KEY, joins INTEGER DEFAULT 1)

De cette manière également, la valeur par défaut de joins pour une nouvelle ligne sera 1, il n'est donc pas nécessaire de la définir dans l'instruction INSERT.

Vous pouvez maintenant utiliser UPSERT comme ceci:

def addP(player_uuid):
    sql = """INSERT INTO joinsdatabase(uuid) VALUES (?)
    ON CONFLICT(uuid) DO UPDATE
    SET joins = joins + 1"""
    cursor.execute(sql, (player_uuid,))
    connection.commit()

Vous n'avez pas besoin de cette ligne:

rows = cursor.execute("SELECT uuid, joins FROM joinsdatabase").fetchall() 

À l'intérieur de addP().

Si votre version de SQLite ne prend pas en charge UPSERT, vous aurez besoin de 2 instructions.

def addP(player_uuid):
    sql = "UPDATE joinsdatabase SET joins = joins + 1 WHERE uuid = ?"
    cursor.execute(sql, (player_uuid,))
    sql = "INSERT OR IGNORE INTO joinsdatabase(uuid) VALUES (?)"
    cursor.execute(sql, (player_uuid,))
    connection.commit()

L'instruction UPDATE mettra à jour la ligne si uuid existe dans la table et l'instruction INSERT insérera la ligne si uuid n'existe pas dans la table.
Cela fonctionnera également si uuid est unique.

0
forpas 24 janv. 2021 à 13:49

Essayez ceci, vous devrez peut-être jouer avec les variables.

cursor.execute("UPDATE joinsdatabase SET count = ? WHERE uuid = ?", (int(oldCount) + 1, player_uuid))
0
harrydev 24 janv. 2021 à 12:40
65870544