2012-09-02 15 views
0

所以這是我第一個使用Django的項目。結果,我似乎每天都在學習如何處理模型的新事物。正因爲如此,我的數據庫每天都在變化。每次我想更新數據庫時,都需要刪除它,創建它,運行syncdb,然後用用戶數據填充它。我希望用Python腳本來自動化這個過程,以免我不斷重新創建數據庫的麻煩。Python腳本來填充auth_user失敗的默認值錯誤

當我嘗試運行INSERT命令時,MySQL告訴我列first_name沒有默認值。我快速瀏覽了源代碼(https://github.com/django/django/blob/master/django/contrib/auth/models.py),並且User類明確定義了first_name列的默認值,以及許多其他人。現在有人爲什麼我得到這個錯誤?

這裏是腳本的相關部分:

import MySQLdb, os 
from django.core.management import call_command 

os.environ['DJANGO_SETTINGS_MODULE'] = "DatingWebsite.settings" 

db = MySQLdb.connect(user = "project", passwd = "project") 
c = db.cursor() 

try: 
    c.execute("DROP DATABASE projectdb;") 
except: 
    pass 
finally: 
    c.execute("CREATE DATABASE projectdb;") 
call_command('syncdb', interactive=False) 
c.execute("USE projectdb;") 

c.executemany("""INSERT INTO auth_user (id, username, email, password) 
VALUES (%s, %s, %s, %s)""", 
[ 
(1, 'bob', '[email protected]', 'pbkdf2_sha256$10000$A3ww6NUZ8TmS$5UA2sXCMS6x7uIGKe20hDckmisBY/rGUK7aye/tMUIw='), 
]) 

感謝您的幫助

回答

1

源代碼和mysql中的表都沒有表示first_namelast_name的任何默認非空值,這是合理的。也許你可能想再次檢查?

mysql> desc auth_user; 
+--------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+--------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| username  | varchar(30) | NO | UNI | NULL |    | 
| first_name | varchar(30) | NO |  | NULL |    | 
| last_name | varchar(30) | NO |  | NULL |    | 
| email  | varchar(75) | NO |  | NULL |    | 
| password  | varchar(128) | NO |  | NULL |    | 
| is_staff  | tinyint(1) | NO |  | NULL |    | 
| is_active | tinyint(1) | NO |  | NULL |    | 
| is_superuser | tinyint(1) | NO |  | NULL |    | 
| last_login | datetime  | NO |  | NULL |    | 
| date_joined | datetime  | NO |  | NULL |    | 
+--------------+--------------+------+-----+---------+----------------+ 
+0

我做了一些研究。顯然,Django在數據庫之上的抽象層實現了默認值。即使數據庫表示默認值爲NULL,Django也會插入它自己的默認值。 – Nick