Django IntegerField 返回长整型

3 投票
1 回答
1789 浏览
提问于 2025-04-17 04:07

我在想,为什么我从数据库中获取一个在models.py中定义为models.IntegerField的字段时,得到的是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

这可能是因为底层的 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,)

撰写回答