有没有人最近有部署带有SQL Server数据库后端的Django应用程序的经验?我们的工作场所大量投入SQL Server,如果没有足够开发的后端,它将不支持Django。
我知道mssql.django-pyodbc和django-mssql是非正式支持的后端。这两个项目似乎只有一个人贡献,虽然贡献似乎有些规律,但有点担心。
是否有很好的支持SQL Server的其他后端?我在这里提到的两个“足够好”用于生产吗?你有什么经历?
答案 0 :(得分:21)
如前所述,django-pyodbc是一个很好的方式。 PyODBC可能是Python最成熟的SQL Server库。
你可能遇到的唯一问题是pyodbc不能很好地支持存储过程(你可以调用它们,但是你无法从它们那里得到结果)。您可以使用pymssql调用它们,但是如果可能的话我会避免它,因为它不支持标准的DB-API接口并且可能会有变化。如果你需要这样做,最好的办法就是直接使用adodbapi(它包含在python win32包中,你最终可能会安装它)。
答案 1 :(得分:13)
这些天
./manage.py migrate
编辑:这是包版本
Django==1.11.6
django-mssql==1.8
pyodbc==4.0.19
django-pyodbc==1.1.1
django-pyodbc-azure==1.11.0.0
答案 2 :(得分:5)
这是一个现代化的"回答这个问题。我在生产的Ubuntu 16.04服务器上成功部署了Django 1.11,该服务器连接到在另一台服务器上运行的MS SQL Server 2017。
首先,为SQL Server"安装本机MS ODBC驱动程序" ODBC驱动程序17:
# https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#ubuntu-1404-1604-and-1710
sudo su
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
ACCEPT_EULA=Y apt-get install msodbcsql
apt-get install unixodbc-dev
# test you can actually get to port 1433 on the server that is running MS SQL:
nc -z -v -w5 host.where.sql.server.is.running.com 1433
# add /opt/mssql-tools/bin to your PATH in .bash_profile, e.g.:
# PATH="$HOME/bin:$HOME/.local/bin:/opt/mssql-tools/bin:$PATH"
# source ~/.bash_profile
# now, test that you can actually connect to MS SQL Server:
sqlcmd -S host.where.sql.server.is.running.com -U db_username -P db_password
其次,请确保pip install
这些模块:
# https://github.com/michiya/django-pyodbc-azure
django-pyodbc-azure==1.11.9.0
# https://github.com/mkleehammer/pyodbc/wiki
pyodbc==4.0.22
第三,修改Django settings.py
的DATABASES条目:
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'db_name',
'USER': 'db_username',
'PASSWORD': 'db_password',
'HOST': 'host.where.sql.server.is.running.com',
'PORT': '1433',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
'isolation_level': 'READ UNCOMMITTED', # prevent SELECT deadlocks
},
},
}
我省略了其余的配置(nginx,Gunicorn,Django REST Framework等),但这不在本答案的范围内。
更新:这已经在生产中运行了6个多月了,并且当多个连接在同一个表上执行SELECT查询时,没有超出MS SQL Server特定死锁的任何问题,这已经通过{修复了{1}}设置。该系统每天大约有2k新用户。
答案 3 :(得分:4)
我们在公司生产中使用django-mssql。我们也有一个使用mssql的现有系统。对我个人而言,这是我做过的最好的设计决定,因为我现在可以使用django,因此我的工作效率大幅提升。
我提交了一个补丁,但是当我开始使用django-mssql并进行了一到两周的测试时。从那时起(2008年10月)我们在django上运行我们的系统,它运行稳定。我也试过pyodbc,但我不喜欢。
我们正在运行一个修复系统,所有交易都通过这个系统运行40个重度用户。如果您有更多问题,请告诉我。
答案 4 :(得分:4)
我见过很多人在Windows上安装django_mssql
后出现以下错误:
django.core.exceptions.ImproperlyConfigured: 'sqlserver_ado' isn't an available database backend. Try using django.db.backends.XXX, where XXX is one of: 'dummy', 'mysql', 'oracle', 'postgresql_psycopg2', 'sqlite3' Error was: No module named sqlserver_ado.base
解决方案是安装以下插件:
答案 5 :(得分:1)
还没有在生产中使用它,但我最初使用django-mssql的经历非常扎实。您只需要Python Win32扩展,并将sqlserver_ado模块放到Python路径上。在那里,您只需使用sql_server.pyodbc
作为DATABASE_ENGINE
。到目前为止,我还没有注意到任何遗漏,但我还没有完全打击它。