2011-10-11 62 views
3

我想知道爲什麼,當我從db中定義爲models.IntegerField的字段位於models.py時,我得到的是long而不是int我有一個模型EventScheduleDjango IntegerField返回長

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 

'

回答

4

這可能是潛在的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,)