如何配置Django在MSSQL上运行

2024-09-21 03:20:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以用SQLite数据库运行django1.11。但是MSSQL服务器出现错误。在

除了设置.py我没有修改任何文件。在

显示配置错误:不支持Django 1.11。
以下是我的配置:

设置.py

DATABASES = {
    'default': {
        'ENGINE': 'django_pyodbc',
        'HOST': '127.0.0.1', 
        'NAME': 'demo2016',
        'USER': 'sa',
        'PASSWORD': '',
        'PORT': '',
        'OPTIONS': {
            'driver': 'ODBC Driver 13 for SQL Server',
        },
    }
}

在命令提示符中:

^{pr2}$

引擎应该是什么:我有零钱

'ENGINE': 'django_pyodbc' to '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:我试图更改数据库->;“引擎”:“sqlserver\u 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:我试图更改数据库->;“引擎”:“sql_服务器.pyodbc'

结果:

来自模型.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

在命令提示符中:

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)')

Tags: djangoinpyselfliblocallinesite
3条回答

Django本机不支持MSSQL。您应该能够使用:Django MSSQL,但请记住,它只支持1.8版本,1.11版本可能存在一些问题。在

为什么要在Django中使用MSSQL?如果是因为你在微软环境中,不用担心——你可以很容易地安装MySQL。我能看到在Django中使用MSSQL的唯一原因是如果您需要访问仍在更新的旧数据库。如果它们是旧的,并且这是一个替代应用程序,那么您可以将数据导出到MySQL。在

尝试使用django-pyodbc-azure

  • 安装pyodbc
  • 安装django pyodbc azure

    pip安装django pyodbc azure

  • 更改数据库引擎

    引擎:'sql_服务器.pyodbc'

在设置.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', 
        }, 
    }, 
}

Reference


您可以使用django mssql

  • 安装django-mssql-支持django1.8

    pip安装django mssql

  • 将数据库引擎更改为sqlserver_ado

    引擎“:”sqlserver_ado'

成功创建。。。特别感谢Anusha Prasanth,Manassehkatz,Ingaz,Jordann和我的研究。由于他们网站上的Django MSSQL Database Backend的旧文档造成了Django的哪个版本与MSSQL兼容的模糊性。仍在更新中…

使用以下软件配置:

  • Django 1.11.8(LTS)
  • MSSQL Server 2017
  • django_pyodbc_azure-1.11.0.0.dist

创建虚拟环境后,请执行以下步骤:

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': 'DESKTOP-C6RS3DO',
        'NAME': 'demo2016',
        'USER': 'sa',
        'PASSWORD': 'sa',
        'PORT': '',
        'OPTIONS': {
            'driver': 'ODBC Driver 13 for SQL Server',
        },
    }
}

非常重要的注意事项:使用服务器pc/笔记本电脑的名称。不要试图使用
<0'><0'> 因为它会导致错误

模型.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>;

^{pr2}$

然后在virtual env中运行这个命令

python manage.py runserver

导航到http://127.0.0.1:8000/admin

类型:

python manage.py createsuperuser

就这样。有关更多文档,请参阅docs djangoproject.com

相关问题 更多 >

    热门问题