如何将 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 KEY
或 UNIQUE
。
所以删除你拥有的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 中存在 uuid
,UPDATE
语句将更新该行,如果 uuid
中存在,INSERT
语句将插入该行table.
中不存在
如果 uuid
是唯一的,这也适用。
我正在尝试制作一个 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 KEY
或 UNIQUE
。
所以删除你拥有的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 中存在 uuid
,UPDATE
语句将更新该行,如果 uuid
中存在,INSERT
语句将插入该行table.
中不存在
如果 uuid
是唯一的,这也适用。