我嘗試使用django_mssql程序包將django項目(Python 3.5.2和Django 1.10.2)插入到SQLServer數據庫,但創建django內部表時失敗。django mssql安裝程序:初始化數據庫時出錯
以下是我把settings.py
DATABASES = {
'default': {
'NAME': 'my_db',
'ENGINE': 'sqlserver_ado',
'HOST': 'my_server',
'USER': 'my_user',
'PASSWORD': 'super_secret_password',
'PORT': '',
'OPTIONS': {
'provider' : 'SQLNCLI11'
},
}
}
,當我嘗試推出任何遷移(即使沒有任何模型中定義),我得到:
python manage.py migrate
(lot of logs here....)
django.db.utils.DatabaseError: (-2147352567, 'Exception occurred.', (0, 'Microso
ft SQL Server Native Client 11.0', "The object 'UQ__auth_use__F3DBC57228A1A130'
is dependent on column 'username'.", None, 0, -2147217900), None)
Command:
ALTER TABLE [auth_user] ALTER COLUMN [username] nvarchar(150) NOT NULL
Parameters:
[]
事實上,該表存在,用戶名列可以爲空,但我們當然不能改變它,因爲此列上存在唯一約束。
腳本應該放棄約束,改變列,重新創建約束。或者不要在腳本中儘早創建約束。
我在SQLServer 2008和2014上嘗試過,發生同樣的事情。
我嘗試使用提供程序SQLOLEDB和SQLNCLI11,發生同樣的事情。
我搜索了很長時間,但沒有發現有人看到過這個問題。
我有點卡住了...
編輯:一天怪異的解決辦法:在auth模型的改變定義刪除列名的唯一性。
更確切地說:在<path_to_python>\Lib\site-packages\django\contrib\auth\migrations
變化:
- 0001_initial.py
- 0004_alter_user_username_opts.py
- 0007_alter_validators_add_error_messages.py
,並刪除相關的用戶模型的用戶名字段所有unique=True
條款。
我希望有一個更好的解決這個問題....