Количество строк, вставленных в базу данных SQLite, является отрицательным - PullRequest
0 голосов
/ 30 января 2012

Я пытаюсь вставить новые записи в базу данных SQLite с кодом Python.

  con = sqlite.connect(connectionString)
  cur = con.cursor()
  countOfNewItems = 0
  for ...
    try:
      con.execute("insert or ignore into items ...")
      countOfNewItems += cur.rowcount
    except:
      cur.close()
      con.close()
      print "Error when inserting item '%s' to database." % item
      exit(1)
  cur.close()
  con.commit()
  con.close()
  print "%d new items have been inserted." % countOfNewItems

Мой код сообщает об отрицательном количестве вставленных записей (-5141).

Поскольку моя база данных была пуста, я мог узнать, сколько записей было вставлено через командную строку

select count(*) from items;

4866

Не могли бы вы посоветовать мне, что не так?Почему два значения не совпадают и почему они отрицательные?

Ответы [ 2 ]

3 голосов
/ 30 января 2012

http://docs.python.org/library/sqlite3.html#sqlite3.Cursor.rowcount

Хотя класс Cursor модуля sqlite3 реализует этот атрибут, собственная поддержка ядром базы данных определения «затронутых строк» ​​/ «выбранных строк» ​​является странной.

и

В соответствии со спецификацией API Python DB атрибут rowcount «равен -1, если не выполняется executeXX () для курсора или счетчика строкпоследняя операция не определяется интерфейсом ».

2 голосов
/ 30 января 2012

Попробуйте cur.execute вместо con.execute. cur.rowcount затем возвращает 1 для меня для простой вставки.

...