Python 如何配置Django在MSSQL服务器上运行
我能够使用SQLite数据库运行Django 1.11。但是我在MSSQL服务器上遇到了一个错误 除了settings.py文件,我没有修改任何内容 它显示配置不当:不支持Django 1.11。 以下是我的配置: 设置.py 在cmd提示符中: 之后,我尝试安装sqlserverPython 如何配置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
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