如何将 1 添加到 SQLite3 整数 (python)

How do I add 1 to a SQLite3 Integer (python)

我正在尝试制作一个 table 来记录玩家登录的次数,按 UUID 和加入次数。

Here is what my table looks like (for testing)

我想让我的程序检查 UUID 是否已经在数据库中,然后将 1 添加到连接数。

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()

试试这个,你可能需要玩弄变量。

cursor.execute("UPDATE joinsdatabase SET count = ? WHERE uuid = ?", (int(oldCount) + 1, player_uuid))

如果您的 SQLite 版本是 3.24.0+,您可以使用 UPSERT,但首先您必须将列 uuid 定义为 PRIMARY KEYUNIQUE。 所以删除你拥有的table:

DROP TABLE joinsdatabase;

然后重新创建它:

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

同样如此,新行的joins默认值为1,因此无需在INSERT语句中设置。

现在您可以像这样使用 UPSERT

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()

你不需要这一行:

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

里面 addP().

如果您的 SQLite 版本不支持 UPSERT 您将需要 2 个语句。

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()

如果 table 中存在 uuidUPDATE 语句将更新该行,如果 uuid 中存在,INSERT 语句将插入该行table.
中不存在 如果 uuid 是唯一的,这也适用。