2015-11-20 3 views
-1

Я пытаюсь сохранить в таблице некоторые данные и, если она изменится, обновит значение.Невозможно вставить данные в базу данных sqlite с помощью Python

def saveobject(obj): 

    save=(obj.field1, obj.field2, obj.field3) 

    con = sqlite3.connect('test.db') 

    with con: 
     cur = con.cursor() 
     cur.execute("CREATE TABLE IF NOT EXISTS Users(field1 TEXT, field2 INT, field3 INT)") 
     allrows = cur.fetchall() 
     print allrows 
     if(len(allrows)==0): 
      cur.execute("INSERT INTO Users VALUES(?,?,?)", save) 
     else: 
      for row in allrows: 
       if(obj.field1==row[0]): 
        if(obj.field2==row[1]): 
         print 'Object already Present' 
         break 
        else: 
         print 'Object field2 updated' 
         cur.execute("UPDATE Users set field2=(?) where field1=(?)", (obj.field2, obj.field1)) 
         break 
       else: 
        cur.execute("INSERT INTO Users VALUES(?,?,?)", save) 
        print 'User added' 

     print 'after ', cur.fetchall() 

Запуск программы, проверить, что объект правильно принят метод (я проверил, что печать «сохранить» и все в порядке), у меня есть следующий вывод:

[] 
after [] 

Что я Я делаю неправильно?

ответ

1
cur.execute("CREATE TABLE IF NOT EXISTS Users(field1 TEXT, field2 INT, field3 INT)") 
allrows = cur.fetchall() 

for row in allrows: 

allrows всегда нулевой длины, так как «создать таблицу» не возвращает строку.

+0

'cur.execute (" SELECT * FROM Users ")' это решение? – brid

+0

Да, но я думаю, что лучше, если вы это сделаете: 'select * from Users где field1 = value1 и field2 = value2 ...' В противном случае вы всегда будете извлекать все строки –

Смежные вопросы