gpt4 book ai didi

python - django mssql 安装程序 : error initializing DB

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:22 24 4
gpt4 key购买 nike

我尝试使用 django_mssql 将 Django 项目(Python 3.5.2 和 Django 1.10.2)插入到 SQLServer 数据库中包,但在创建 Django 内部表时失败。

这是我在 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,同样的事情发生了。

我搜索了很长时间,但没有发现任何人看到过这个问题。

我有点卡住了...


编辑:当天奇怪的解决方法:更改身份验证模型的定义以删除列用户名的唯一性。

更准确地说:在<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与用户模型的用户名字段相关的子句。

我希望这个问题有更好的解决方案......

最佳答案

与其修补其他迁移文件,不如将迁移 008 分为两部分练习,第一个操作只是取消约束并更改长度,然后第二个操作将唯一约束放回原位(以便用户名字段仍然是预期的唯一)并按设计调整其他参数。

幸运的是(或巧妙地)迁移代码在尝试更改长度之前执行了约束操作,因此第一个操作成功,尽管字段创建时唯一约束已经为 True。如果执行顺序发生变化,那么我们可能需要 3 个操作 - 首先取消约束,第二个更改长度,第三个放回约束。

修复文件后,运行

manage.py migrate

再次。

我已经尝试通过再次运行它来完成失败的迁移,并且还完全删除数据库然后再次创建它为空并再次运行迁移以从头开始构建。两者似乎都可以正常工作,并为您留下预期的约束和其他字段属性。

要应用此修复,只需在您的本地版本中修改迁移中的操作列表:

... Lib\site-packages\django\contrib\auth\migrations\008_alter_user_username_max_length.py

做这两个 Action ,因此:

operations = [
migrations.AlterField(
model_name='user',
name='username',
field=models.CharField(
max_length=150,
unique=False,
),
),
migrations.AlterField(
model_name='user',
name='username',
field=models.CharField(
error_messages={'unique': 'A user with that username already exists.'},
help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.',
max_length=150,
unique=True,
validators=[validators.UnicodeUsernameValidator() if six.PY3 else validators.ASCIIUsernameValidator()],
verbose_name='username',
),
),
]

关于python - django mssql 安装程序 : error initializing DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40288056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com