代码之家  ›  专栏  ›  技术社区  ›  Josh Smeaton

在生产环境中使用Sql Server和Django

  •  52
  • Josh Smeaton  · 技术社区  · 16 年前

    7 回复  |  直到 16 年前
        1
  •  21
  •   Jason Baker    16 年前

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

        2
  •  11
  •   Gabriel Shadi    7 年前

    这些天

    编辑:这是软件包版本

    Django==1.11.6
    django-mssql==1.8
    pyodbc==4.0.19
    django-pyodbc==1.1.1
    django-pyodbc-azure==1.11.0.0
    
        3
  •  5
  •   Cloud Artisans    7 年前

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

    首先,安装本机MS ODBC驱动程序“ODBC driver 17 for SQL Server”:

    # https://learn.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的DATABASES条目 settings.py :

    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

        4
  •  4
  •   Paul    16 年前

    我们公司在生产中使用django-mssql。我们也有一个使用mssql的现有系统。对我个人来说,这是我做过的最好的设计决定,因为现在我可以使用django,我的生产力大大提高了。

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

        5
  •  4
  •   SaeX    10 年前

    我见过很多人在安装后出现以下错误 django_mssql 在Windows上:

    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/

        6
  •  1
  •   tghw megawac    16 年前

    使用以下内容 微软官方软件包 将SQL服务器连接到Django。

    pip install mssql-django
    

    设置

     DATABASES = {
        'default': {
            'ENGINE': 'mssql',
            'NAME': 'mydb',
            'USER': 'user@myserver',
            'PASSWORD': 'password',
            'HOST': 'myserver.database.windows.net',
            'PORT': '',
    
            'OPTIONS': {
                'driver': 'ODBC Driver 17 for SQL Server',
            },
        },
    }
    
    # set this to False if you want to turn off pyodbc's connection pooling
    DATABASE_CONNECTION_POOLING = False
    

    详细信息 : https://github.com/microsoft/mssql-django