Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何配置Django在MSSQL服务器上运行_Python_Sql Server_Django_Django Models_Django Forms - Fatal编程技术网

Python 如何配置Django在MSSQL服务器上运行

Python 如何配置Django在MSSQL服务器上运行,python,sql-server,django,django-models,django-forms,Python,Sql Server,Django,Django Models,Django Forms,我能够使用SQLite数据库运行Django 1.11。但是我在MSSQL服务器上遇到了一个错误 除了settings.py文件,我没有修改任何内容 它显示配置不当:不支持Django 1.11。 以下是我的配置: 设置.py 在cmd提示符中: 之后,我尝试安装sqlserver C:\Windows\system32>pip install sqlserver Collecting sqlserver Could not find a version that satisfies

我能够使用SQLite数据库运行Django 1.11。但是我在MSSQL服务器上遇到了一个错误

除了settings.py文件,我没有修改任何内容

它显示配置不当:不支持Django 1.11。 以下是我的配置: 设置.py

在cmd提示符中:

之后,我尝试安装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”

结果:

在cmd提示符中:

尝试使用

安装pyodbc 安装django pyodbc azure

pip安装django pyodbc azure

更改数据库引擎

引擎:“sql_server.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', 
        }, 
    }, 
}

您可以使用django mssql

安装django mssql-支持django 1.8

pip安装django mssql

将数据库引擎更改为sqlserver\u ado

引擎“:“sqlserver\u ado”

尝试使用

安装pyodbc 安装django pyodbc azure

pip安装django pyodbc azure

更改数据库引擎

引擎:“sql_server.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', 
        }, 
    }, 
}

您可以使用django mssql

安装django mssql-支持django 1.8

pip安装django mssql

将数据库引擎更改为sqlserver\u ado

引擎“:“sqlserver\u ado”


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


为什么要将MSSQL与Django一起使用?如果这是因为您在Microsoft环境中,不要担心,您可以很容易地安装MySQL。我认为将MSSQL与Django结合使用的唯一原因是,如果您需要访问仍在更新的遗留数据库。如果它们是旧的,并且这是一个替换应用程序,那么您可以将数据导出到MySQL。

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


为什么要将MSSQL与Django一起使用?如果这是因为您在Microsoft环境中,不要担心,您可以很容易地安装MySQL。我认为将MSSQL与Django结合使用的唯一原因是,如果您需要访问仍在更新的遗留数据库。如果它们是旧的,并且这是一个替换应用程序,那么您可以将数据导出到MySQL。

已成功创建。。。特别感谢Anusha Prasanth、Manassehkatz、Ingaz、Jordanm和我的研究。由于他们网站中的旧文档导致了Django版本是否适用于MSSQL的不确定性。仍在更新过程中

使用以下软件配置:

Django 1.11.8 LTS MSSQL服务器2017 django_pyodbc_azure-1.11.0.0.dist 创建虚拟环境后,请执行以下步骤:

非常重要的注意事项:使用服务器pc/笔记本电脑的名称。不要试图使用 “主机”:“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>

然后在虚拟环境中运行此cmd

python manage.py runserver
导航到

类型:


就这样。有关更多文档,请参阅成功创建的。。。特别感谢Anusha Prasanth、Manassehkatz、Ingaz、Jordanm和我的研究。由于他们网站中的旧文档导致了Django版本是否适用于MSSQL的不确定性。仍在更新过程中

使用以下软件配置:

Django 1.11.8 LTS MSSQL服务器2017 django_pyodbc_azure-1.11.0.0.dist 创建虚拟环境后,请执行以下步骤:

非常重要的注意事项:使用服务器pc/笔记本电脑的名称。不要试图使用 “主机”:“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>

然后在虚拟环境中运行此cmd

python manage.py runserver
导航到

类型:


就这样。有关更多文档,请参阅

似乎最好坚持今天似乎最好坚持今天错误的数据库引擎。@jordanm,这是错误的。我以为是关于MySQL的。编辑了我的答案。@Anusha Prasanth。我已经编辑了这篇文章。根据你的回答,你会再次看到问题。让我知道应该如何解决它。@Nishanth,使用sql_server.pyodbc作为数据库引擎。请参阅更新的answer@Anusha我也试过了,妈妈。查看来自错误数据库引擎的结果。@jordanm,这是错误的。我以为是关于MySQL的。编辑了我的答案。@Anusha Prasanth。我已经编辑了这篇文章。根据你的回答,你会再次看到问题。让我知道应该如何解决它。@Nishanth,使用sql_server.pyodbc作为数据库引擎。请参阅更新的answer@Anusha我也试过了,妈妈。查看问题的结果将Django与MSSQL结合使用有很多原因。管理接口是t
褶边IDK,现在的情况是这样的,但是我用django和mssql做项目没有问题。另一方面,MySQL很少能代替MSSQL——它们也是different@Ingaz如果您正在创建一个专门的Django项目(这种情况并不总是如此),并且您使用Django ORM进行所有数据库访问,那么除了不同数据库引擎之间的性能之外,应该没有什么差别。管理是一个问题——就个人而言,我更喜欢MySQL而不是PostgreSQL,后者是我与Django一起使用的另一个数据库,因为phpMyAdmin作为管理页面非常适合我。MySQL或PostgreSQL在平台(Windows、Linux、Mac)方面比MSSQL具有更大的灵活性。你完全正确:在数据库专门用于django的情况下,没有区别。我从来没有过这样的经历experience@Ingaz我的直觉是,这是一个全新的应用程序,基于SQLite。但我不确定这就是为什么我在回答中提到,如果您需要访问仍在更新的遗留数据库,而OP尚未响应,那么我还不知道。将Django与MSSQL结合使用有很多原因。管理界面就是其中之一。IDK,现在的情况是这样的,但是我用django和mssql做项目没有问题。另一方面,MySQL很少能代替MSSQL——它们也是different@Ingaz如果您正在创建一个专门的Django项目(这种情况并不总是如此),并且您使用Django ORM进行所有数据库访问,那么除了不同数据库引擎之间的性能之外,应该没有什么差别。管理是一个问题——就个人而言,我更喜欢MySQL而不是PostgreSQL,后者是我与Django一起使用的另一个数据库,因为phpMyAdmin作为管理页面非常适合我。MySQL或PostgreSQL在平台(Windows、Linux、Mac)方面比MSSQL具有更大的灵活性。你完全正确:在数据库专门用于django的情况下,没有区别。我从来没有过这样的经历experience@Ingaz我的直觉是,这是一个全新的应用程序,基于SQLite。但我不知道这是为什么我在回答中指出,如果您需要访问仍在更新的旧数据库,并且OP尚未响应,那么我还不知道。@manassehkatz如果您发现其中的任何缺陷,请发表评论below@Ingaz如果您发现其中有任何缺陷,请参考此文档,并发表评论below@jordanm如果您发现有问题,请参阅此如果我的上述配置或其他外部实体构成威胁,请对其中的任何缺陷进行评论。让我知道,因为我需要主持会议website@manassehkatz如果您发现其中有任何缺陷,请参考此文档,并发表评论below@Ingaz如果您发现其中有任何缺陷,请参考此文档,并发表评论below@jordanm如果您发现其中存在任何缺陷,请参考此内容。如果我的上述配置或其他外部实体构成威胁,请发表评论。让我知道,因为我需要主持网站
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', 
        }, 
    }, 
}
DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': 'DESKTOP-C6RS3DO',
        'NAME': 'demo2016',
        'USER': 'sa',
        'PASSWORD': 'sa',
        'PORT': '',
        'OPTIONS': {
            'driver': 'ODBC Driver 13 for SQL Server',
        },
    }
}
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 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
python manage.py runserver
python manage.py createsuperuser