我可以用SQLite数据库运行Django 1.11。但是我收到了MSSQL Server的错误。
除了settings.py文件,我还没有修改任何内容。
显示不正确的配置:不支持Django 1.11。
这是我的配置:
DATABASES = {
'default': {
'ENGINE': 'django_pyodbc',
'HOST': '127.0.0.1',
'NAME': 'demo2016',
'USER': 'sa',
'PASSWORD': '',
'PORT': '',
'OPTIONS': {
'driver': 'ODBC Driver 13 for SQL Server',
},
}
}
在cmd提示符中
C:\Users\Vitriv-Desktop\Desktop\sqldjango>python manage.py migrate
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\__init__.py", line 364, in execute_from_command_line
utility.execute()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\__init__.py", line 338, in execute
django.setup()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\apps\registry.py", line 108, in populate
app_config.import_models()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\apps\config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\contrib\auth\models.py", line 4, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\contrib\auth\base_user.py", line 52, in <module>
class AbstractBaseUser(models.Model):
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\base.py", line 124, in __new__
new_class.add_to_class('_meta', Options(meta, app_label))
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\base.py", line 325, in add_to_class
value.contribute_to_class(cls, name)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\options.py", line 214, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\__init__.py", line 33, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\utils.py", line 211, in __getitem__
backend = load_backend(db['ENGINE'])
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\utils.py", line 115, in load_backend
return import_module('%s.base' % backend_name)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django_pyodbc\base.py", line 98, in <module>
raise ImproperlyConfigured("Django %d.%d is not supported." % DjangoVersion[:2])
django.core.exceptions.ImproperlyConfigured: Django 1.11 is not supported.
引擎应该是什么:我从
改变了'ENGINE':'django_pyodbc'到'ENGINE':'sqlserver'
之后显示
django.core.exceptions.ImproperlyConfigured: 'sqlserver' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
'mysql', 'oracle', 'postgresql', 'sqlite3'
Error was: No module named 'sqlserver'
之后我尝试安装sqlserver
C:\Windows\system32>pip install sqlserver
Collecting sqlserver
Could not find a version that satisfies the requirement sqlserver (from versions: )
No matching distribution found for sqlserver
根据@Anusha Prashanth回答
方法1:我尝试更改数据库 - &gt;'ENGINE':'sqlserver_ado'
结果:
C:\Users\Vitriv-Desktop\Desktop\sqldjango>python manage.py migrate
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\__init__.py", line 364, in execute_from_command_line
utility.execute()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\__init__.py", line 338, in execute
django.setup()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\apps\registry.py", line 108, in populate
app_config.import_models()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\apps\config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\contrib\auth\models.py", line 4, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\contrib\auth\base_user.py", line 52, in <module>
class AbstractBaseUser(models.Model):
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\base.py", line 124, in __new__
new_class.add_to_class('_meta', Options(meta, app_label))
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\base.py", line 325, in add_to_class
value.contribute_to_class(cls, name)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\options.py", line 214, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\__init__.py", line 33, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\utils.py", line 212, in __getitem__
conn = backend.DatabaseWrapper(db, alias)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\sqlserver_ado\base.py", line 184, in __init__
super(DatabaseWrapper, self).__init__(*args, **kwargs)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 96, in __init__
self.client = self.client_class(self)
TypeError: 'NoneType' object is not callable
方法2:我尝试更改数据库 - &gt;'ENGINE':'sql_server.pyodbc'
结果:
来自 models.py
import os
import mimetypes
from django.utils.translation import gettext as _
from django.conf import settings
from django.contrib.auth.models import User
from django.db import models
GENRE_CHOICES = (
('1', 'Rock'),
('2', 'Jazz/Blues'),
('3', 'Blues'),
)
def get_upload_path(dirname, obj, filename):
return os.path.join("audiotracks", dirname, obj.user.username, filename)
def get_audio_upload_path(obj, filename):
return get_upload_path("audio_files", obj, filename)
class Genre(models.Model):
genre_choices = models.CharField(max_length=1, choices=GENRE_CHOICES)
slug = models.SlugField(max_length = 40, unique = True) #so as to have a dedicated page for each category
description = models.TextField()
def __unicode__(self):
return self.title
def get_absolute_url(self):
return "/genres/%s/" % self.slug
class AudioTrack(models.Model):
class Meta:
abstract = True
user = models.ForeignKey(User,
related_name = "tracks",
blank = True,
null = True
)
added_on = models.DateTimeField(auto_now_add=True, null = True)
updated_on = models.DateTimeField(auto_now=True, null = True)
audio_file = models.FileField(_("Audio file"), upload_to=get_audio_upload_path)
title = models.CharField(_("Title"), max_length="200", null=True)
description = models.TextField(_("Description"), null=True, blank=True)
slug = models.SlugField(max_length = 40, unique = True) #so as to have a dedicated page for each category
genres = models.ManyToManyField(Genre)
def __unicode__(self):
return "Track '%s' uploaded by '%s'" % (self.title, self.user.username)
@property
def mimetype(self):
if not hasattr(self, '_mimetype'):
self._mimetype = mimetypes.guess_type(self.audio_file.path)[0]
return self._mimetype
@property
def filetype(self):
if '/' in self.mimetype:
type_names = {'mpeg': 'MP3', 'ogg': 'Ogg Vorbis', 'wave':'wav', 'FLAC':'FLA'}
filetype = self.mimetype.split('/')[1]
return type_names.get(filetype, filetype)
else:
return self.mimetype
@models.permalink
def get_absolute_url(self):
# ('tracks.views.track_detail', [self.user.username, self.slug])
return "/%s/%s/" %(self.genre, self.slug)
if hasattr(settings, 'AUDIOTRACKS_MODEL'):
app_name, model_name = settings.AUDIOTRACKS_MODEL.split('.')
Track = models.get_model(app_name, model_name)
else:
class Track(AudioTrack):
pass
在cmd提示符中
C:\Users\Vitriv-Desktop\Desktop\mydjango>python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x040AE108>
Traceback (most recent call last):
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 213, in ensure_connection
self.connect()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 189, in connect
self.connection = self.get_new_connection(conn_params)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\sql_server\pyodbc\base.py", line 309, in get_new_connection
timeout=timeout)
pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 13 for SQL Server]Named Pipes Provider: Could not open a connection to SQL Server [5]. (5) (SQLDriverConnect); [08001] [Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired (0); [08001] [Microsoft][ODBC Driver 13 for SQL Server]Invalid connection string attribute (0); [08001] [Microsoft][ODBC Driver 13 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. (5)')
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\utils\autoreload.py", line 228, in wrapper
fn(*args, **kwargs)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\commands\runserver.py", line 128, in inner_run
self.check_migrations()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\management\base.py", line 422, in check_migrations
executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\migrations\executor.py", line 20, in __init__
self.loader = MigrationLoader(self.connection)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\migrations\loader.py", line 52, in __init__
self.build_graph()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\migrations\loader.py", line 209, in build_graph
self.applied_migrations = recorder.applied_migrations()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\migrations\recorder.py", line 65, in applied_migrations
self.ensure_schema()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\migrations\recorder.py", line 52, in ensure_schema
if self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor()):
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 254, in cursor
return self._cursor()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 229, in _cursor
self.ensure_connection()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 213, in ensure_connection
self.connect()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\utils.py", line 94, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\utils\six.py", line 685, in reraise
raise value.with_traceback(tb)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 213, in ensure_connection
self.connect()
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 189, in connect
self.connection = self.get_new_connection(conn_params)
File "C:\Users\Vitriv-Desktop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\sql_server\pyodbc\base.py", line 309, in get_new_connection
timeout=timeout)
django.db.utils.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 13 for SQL Server]Named Pipes Provider: Could not open a connection to SQL Server [5]. (5) (SQLDriverConnect); [08001] [Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired (0); [08001] [Microsoft][ODBC Driver 13 for SQL Server]Invalid connection string attribute (0); [08001] [Microsoft][ODBC Driver 13 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. (5)')
答案 0 :(得分:1)
Django本身并不支持MSSQL。您应该可以使用:Django MSSQL但请注意,它仅显示1.8的支持,1.11可能存在一些问题。
为什么要在Django中使用MSSQL?如果是因为您处于Microsoft环境中,请不要担心 - 您可以非常轻松地安装MySQL。我可以看到使用MSSQL和Django的唯一原因是你需要访问仍在更新的旧数据库。如果它们是旧的并且这是替换应用程序,那么您可以将数据导出到MySQL。
答案 1 :(得分:1)
成功创作......特别感谢 Anusha Prasanth,Manassehkatz,Ingaz,Jordanm 和我的研究。由于他们网站上的Django MSSQL Database Backend旧文档会产生歧义,无论Django的哪个版本与MSSQL一起使用。仍处于更新过程中......
使用以下软件配置:
创建虚拟环境后,请按照以下步骤操作:
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'HOST': 'DESKTOP-C6RS3DO', 'NAME': 'demo2016', 'USER': 'sa', 'PASSWORD': 'sa', 'PORT': '', 'OPTIONS': { 'driver': 'ODBC Driver 13 for SQL Server', }, } }
非常重要注意:使用服务器个人电脑/笔记本电脑的名称。不要试图使用
'主机':'127.0.0.1',
因为它导致错误
在 models.py (定义需要包含的任何类)
import os
import mimetypes
from django.utils.translation import gettext as _
from django.conf import settings
from django.contrib.auth.models import User
from django.db import models
GENRE_CHOICES = (
('1', 'Rock'),
('2', 'Jazz/Blues'),
('3', 'Blues'),
)
def get_upload_path(dirname, obj, filename):
return os.path.join("audiotracks", dirname, obj.user.username, filename)
def get_audio_upload_path(obj, filename):
return get_upload_path("audio_files", obj, filename)
class Genre(models.Model):
genre_choices = models.CharField(max_length=1, choices=GENRE_CHOICES)
slug = models.SlugField(max_length = 40, unique = True) #so as to have a dedicated page for each category
description = models.TextField()
def __unicode__(self):
return self.title
def get_absolute_url(self):
return "/genres/%s/" % self.slug
class AudioTrack(models.Model):
class Meta:
abstract = True
user = models.ForeignKey(User,
related_name = "tracks",
blank = True,
null = True
)
added_on = models.DateTimeField(auto_now_add=True, null = True)
updated_on = models.DateTimeField(auto_now=True, null = True)
audio_file = models.FileField(_("Audio file"), upload_to=get_audio_upload_path)
title = models.CharField(_("Title"), max_length="200", null=True)
description = models.TextField(_("Description"), null=True, blank=True)
slug = models.SlugField(max_length = 40, unique = True) #so as to have a dedicated page for each category
genres = models.ManyToManyField(Genre)
def __unicode__(self):
return "Track '%s' uploaded by '%s'" % (self.title, self.user.username)
@property
def mimetype(self):
if not hasattr(self, '_mimetype'):
self._mimetype = mimetypes.guess_type(self.audio_file.path)[0]
return self._mimetype
@property
def filetype(self):
if '/' in self.mimetype:
type_names = {'mpeg': 'MP3', 'ogg': 'Ogg Vorbis', 'wave':'wav', 'FLAC':'FLA'}
filetype = self.mimetype.split('/')[1]
return type_names.get(filetype, filetype)
else:
return self.mimetype
@models.permalink
def get_absolute_url(self):
# ('tracks.views.track_detail', [self.user.username, self.slug])
return "/%s/%s/" %(self.genre, self.slug)
if hasattr(settings, 'AUDIOTRACKS_MODEL'):
app_name, model_name = settings.AUDIOTRACKS_MODEL.split('.')
Track = models.get_model(app_name, model_name)
else:
class Track(AudioTrack):
pass
在CMD&gt;
C:\Users\Vitriv-Desktop\Desktop\mydjango> python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying sessions.0001_initial... OK
之后在虚拟环境中运行此cmd,
python manage.py runserver
导航至http://127.0.0.1:8000/admin
类型:
python manage.py createsuperuser
就是这样。有关更多文档,请参阅docs djangoproject.com
答案 2 :(得分:0)
安装django-pyodbc-azure
pip install django-pyodbc-azure
更改数据库引擎
ENGINE:&#39; sql_server.pyodbc&#39;
Settings.py
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'mydb',
'USER': 'user@myserver',
'PASSWORD': 'password',
'HOST': 'myserver.database.windows.net',
'PORT': '',
'OPTIONS': {
'driver': 'ODBC Driver 13 for SQL Server',
},
},
}
或强>
您可以使用django-mssql
安装django-mssql
- 支持django 1.8
pip install django-mssql
将数据库引擎更改为sqlserver_ado
ENGINE&#39;:&#39; sqlserver_ado&#39;