2015-03-02 175 views
0

当我尝试向我的数据库插入数据时,就像它只是简单地覆盖整个文件或者不能正确保存它。 我对这个剧本的想法是,如果我跑了多次,它会输出这样的:Python Sqlite3 - 数据被覆盖

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

我真的希望这工作,因为我工作的一所学校项目中,我的产品是做一个功能商店,你可以加入他们最新添加,删除产品,对它们进行排序。

回答

2

两个问题:

  1. 如果存在您要删除的表,这总是会删除该表:

    c.execute("DROP TABLE IF EXISTS t1") 
    
  2. 您要重新创建表下探后:

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

Yo你可以评论上面的代码并重新运行你的脚本来获得你想要的输出。但是,在最终版本中,确保在写入数据之前检查db和table是否存在。

+0

那么有道理,但如果表不存在,我该如何创建一个表? – RasmusGP 2015-03-02 07:31:33

+1

我想你只需要将'CREATE TABLE'改成'CREATE TABLE IF NOT EXISTS'。 – user3 2015-03-02 07:43:27