繁体   English   中英

在生产中使用带有Django的Sql Server

[英]Using Sql Server with Django in production

有没有人最近有部署带有SQL Server数据库后端的Django应用程序的经验? 我们的工作场所大量投入SQL Server,如果没有足够开发的后端,它将不支持Django。

我知道mssql.django-pyodbc和django-mssql是非正式支持的后端。 这两个项目似乎只有一个人贡献,这有点担心,虽然贡献似乎有点规律。

是否有很好的支持SQL Server的任何其他后端? 我在这里提到的两个“足够好”用于生产吗? 你有什么经历?

如前所述,django-pyodbc是一个很好的方式。 PyODBC可能是Python最成熟的SQL Server库。

您可能遇到的唯一问题是pyodbc不能很好地支持存储过程(您可以调用它们,但是您无法从它们获得结果)。 可以使用pymssql调用它们,但是如果可能的话我会避免它,因为它不支持标准的DB-API接口并且可能会有变化。 如果你需要这样做,你最好的选择是直接使用adodbapi (它包含在python win32包中,你最终可能会安装它)。

这些日子

编辑:这是包版本

Django==1.11.6
django-mssql==1.8
pyodbc==4.0.19
django-pyodbc==1.1.1
django-pyodbc-azure==1.11.0.0

这是这个问题的“现代”答案。 我成功地在生产Ubuntu 16.04服务器上部署了Django 1.11,该服务器连接到在另一台服务器上运行的MS SQL Server 2017。

首先,安装本机MS ODBC驱动程序“SQL Server的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特定的死锁,这是使用isolation_level设置修复的。 该系统每天大约有2k新用户。

我见过很多人在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

解决方案是安装以下插件:

http://sourceforge.net/projects/pywin32/

我们在我们公司的生产中使用django-mssql。 我们也有一个使用mssql的现有系统。 对我个人而言,这是我做过的最好的设计决定,因为我现在可以使用django,因此我的工作效率大幅提升。

我提交了一个补丁,但是当我开始使用django-mssql并进行了一到两周的测试时。从那时起(2008年10月)我们在django上运行我们的系统,它运行稳定。 我也试过pyodbc,但我不喜欢。

我们正在运行一个修复系统,所有交易都通过这个系统运行40个重度用户。 如果您有更多问题,请告诉我。

还没有在生产中使用它,但我最初使用django-mssql的经历非常扎实。 您只需要Python Win32扩展,并将sqlserver_ado模块放到Python路径上。 从那里,您只需使用sql_server.pyodbc作为DATABASE_ENGINE 到目前为止,我还没有注意到任何遗漏,但我还没有完全发现它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM