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

时间:2009-05-09 06:45:30

标签: python sql-server django pyodbc

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

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

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

6 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:13)

这些天

  • django-mssql./manage.py migrate
  • 导致错误“NoneType not callable”
  • avidal/django-pyodbc:没有维护。取而代之:
    • django-pyodbc:不支持python 3
    • django-pyodbc-azure:到目前为止对我有用
      • 编辑:似乎没有维护。提起issue 125询问状态
      • 编辑:得到了维护者的回复。将很快与Django 2.0进行更新
      • 编辑:维护者为django 2.0发布了2.0版本
      • 编辑:维护者发布了2.1版django 2.1

编辑:这是包版本

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

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

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

答案 5 :(得分:1)

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