Попытка получить следующее значение в последовательности из БД postgres с помощью django - PullRequest
6 голосов
/ 27 марта 2011

В моей базе данных определена последовательность, которую я хочу использовать в своем приложении django.Я предположил, что мог бы использовать необработанный метод sql, указанный в документации по django, здесь: http://docs.djangoproject.com/en/1.1/topics/db/sql/. Мой план состоял в том, чтобы выполнить следующий SQL-запрос:

select nextval('winner')

, где winner - последовательность, которую я хочу получитьследующее значение от.Вот мой код:

from django.db import connection, transaction

.....

cursor = connection.cursor()

result = cursor.execute("select nextval('winner')")

Результатом всегда является объект NoneType.Это кажется довольно простым и понятным, но я не смог сделать эту работу.Я пробовал это в интерактивной консоли с теми же результатами.Если я смотрю в объекте connection.queries, я вижу это:

{'time': '0.000', 'sql': "select nextval('winner')"}

Сгенерированный sql действителен.Есть идеи?

Я использую:

  • Django 1.1
  • Python 2.6
  • Postgres 8.3
  • Psycopg2
  • Mac OSX

Ответы [ 2 ]

7 голосов
/ 27 апреля 2016

Этот код будет работать:

from django.db import connection, transaction

cursor = connection.cursor()
cursor.execute("select nextval('winner')")
result = cursor.fetchone()
4 голосов
/ 27 марта 2011

cursor.execute всегда возвращает None.

Чтобы получить значение из оператора SQL, вы должны использовать cursor.fetchone() (или fetchall()).

См. документацию , хотя обратите внимание, что на самом деле это не имеет ничего общего с Django, но является стандартным API-интерфейсом Python SQL DB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...