Django IntegerField возвращает long

#python #django

#python #django

Вопрос:

Мне интересно, почему, когда я получаю поле из базы данных, которое определено как models.IntegerField в моделях.py я получаю long вместо int , например, у меня есть модель EventSchedule

 class EventSchedule(models.Model):
    monthly_day = models.IntegerField(default=1)
    ...
  

в db это

 mysql> describe t_event_schedule;
 ------------------------ ------------- ------ ----- --------- ------- 
| Field                  | Type        | Null | Key | Default | Extra |
 ------------------------ ------------- ------ ----- --------- ------- 
| monthly_day            | int(11)     | NO   |     | 1       |       |
...
  

но когда я создаю объект и извлекаю обратное значение из базы данных, это long

 >>> e = EventSchedule()
>>> e.monthly_day
1
>>> e.save()
>>> e2 = EventSchedule.objects.get(id=e.id)
>>> e2.monthly_day
1L
  

Я использую

 >>> django.VERSION
(1, 2, 1, 'final', 0
>>> platform.python_version()
'2.6.5
  

Ответ №1:

вероятно, это побочный эффект базового dbapi обработчика, который возвращает long практически все:

 >>> import MySQLdb
>>> db=MySQLdb.connect(db="test")
>>> c = db.cursor()
>>> c.execute("Select 1")
1L
  

Разница для большинства применений является косметической. Существуют небольшие различия между одним драйвером и другим, например, sqlite3 не возвращает long для этого же запроса.:

 >>> import sqlite3
>>> db = sqlite3.connect(":memory:")
>>> c = db.cursor()
>>> c.execute("Select 1")
<sqlite3.Cursor object at 0x7f2c425ae9d0>
>>> c.execute("Select 1").fetchone()
(1,)