Джанго IntegerField возвращается долго - PullRequest
3 голосов
/ 12 октября 2011

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

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

в дБ это

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 Ответ

4 голосов
/ 12 октября 2011

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

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

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

>>> import sqlite3
>>> db = sqlite3.connect(":memory:")
>>> c = db.cursor()
>>> c.execute("Select 1")
<sqlite3.Cursor object at 0x7f2c425ae9d0>
>>> c.execute("Select 1").fetchone()
(1,)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...