Django IntegerField返回长
问题内容:
我想知道为什么,当我从db中获得一个models.IntegerField
在models.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 | |
...
但是当我创建一个对象并从db中检索回值时,它是 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
‘
问题答案:
这可能是底层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,)