Python Sqlite3-数据被覆盖

Python Sqlite3-数据被覆盖,python,sqlite,Python,Sqlite,当我试图将数据插入数据库时,就好像它只是覆盖了整个文件,或者没有正确保存。 我对这个脚本的想法是,如果我多次运行它,它将输出以下内容: (1, 126) (2, 127) (3, 126) (4, 127) 我现在还知道,如果我没有在脚本中创建表,它会给我一个错误,即表不存在,即使表是在上次运行脚本时创建的 import sqlite3 # Connecting to the database file conn = sqlite3.connect("MyDB.db") c = conn.c

当我试图将数据插入数据库时,就好像它只是覆盖了整个文件,或者没有正确保存。 我对这个脚本的想法是,如果我多次运行它,它将输出以下内容:

(1, 126)
(2, 127)
(3, 126)
(4, 127)
我现在还知道,如果我没有在脚本中创建表,它会给我一个错误,即表不存在,即使表是在上次运行脚本时创建的

import sqlite3

# Connecting to the database file
conn = sqlite3.connect("MyDB.db")
c = conn.cursor()

# Check if table exists
c.execute("DROP TABLE IF EXISTS t1")


# Create table
c.execute('''CREATE TABLE t1(
             a INTEGER PRIMARY KEY,
             b INTEGER);''')

# Insert value
c.execute('''INSERT INTO t1 VALUES(NULL,126);''')
c.execute('''INSERT INTO t1 VALUES(NULL,127);''')

# Save changes
conn.commit()

for row in c.execute('SELECT * FROM t1'):
        print(row)

# Output:
# (1, 126)
# (2, 127)
conn.close()
我真的很想这样做,因为我正在学校的一个项目中工作,我的产品是建立一个功能商店,在那里你可以添加、删除产品,并按添加日期对它们进行排序。

两个问题:

  • 如果要删除该表,则此操作将始终删除该表:

    c.execute("DROP TABLE IF EXISTS t1")
    
  • 您正在删除以下内容后重新创建表:

    c.execute('''CREATE TABLE t1(
         a INTEGER PRIMARY KEY,
         b INTEGER);''')
    

  • 您可以对上述代码进行注释,然后重新运行脚本以获得所需的输出。但是,在最终版本中,确保在写入数据库之前检查数据库和表是否存在。

    这是有道理的,但是如果表不存在,我如何创建表?我认为您只需将
    创建表
    更改为
    创建表(如果不存在)