#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,)