将Django连接到MSSQL Server Express 2014数据库

时间:2018-03-21 19:38:14

标签: python django sql-server-2014-express

我正在使用VirtualEnv和Pip在Ubuntu服务器(Ubuntu 16.04.3 LTS)上运行Django(1.8)。

pip freeze

astroid==1.5.3
backports.functools-lru-cache==1.4
configparser==3.5.0
Django==1.8
django-mssql==1.8
django-pyodbc==1.1.1
django-pyodbc-azure==1.11.0.0
django-sqlserver==1.11
enum34==1.1.6
future==0.16.0
inflection==0.3.1
isort==4.2.15
lazy-object-proxy==1.3.1
mccabe==0.6.1
peewee==3.1.5
pkg-resources==0.0.0
psycopg2==2.7.3.1
pyad==0.5.15
pylint==1.7.4
pyodbc==4.0.19
PyPiwi==1.8
python-tds==1.8.2
pytz==2017.2
singledispatch==3.4.0.3
six==1.11.0
South==1.0.2
wrapt==1.10.11

我目前正在努力使用sqlserver_ado ENGINE并且正在使用它,因为它似乎是最受欢迎的,但我知道django.db.backends.postgresql_psycopg2和sql_server.pyodbc,并愿意在下降时跳槽一顶帽子。

所以我的DATABASES定义如下:

'default': {
    'NAME': 'DB_NAME',
    'ENGINE': 'sqlserver_ado',
    'HOST': 'HOSTNAME\\SQLEXPRESS',
    'PORT': '56988',
    'USER': 'mssql_name',
    'PASSWORD': 'mssql_pw',}

Django运行此信息。太棒了。但是当我点击我的功能时,

    def my_custom_sql(self):
    with connection.cursor() as cursor:
        cursor.execute("SELECT * FROM [GM].[Acct]")
        row = cursor.fetchone()
    return row 

我遇到异常:使用DATABASE PORT时,DATABASE HOST必须是IP地址。如果我尝试将主机更改为IP地址,Django将无法运行,并且会发出以下信息:

  File "/home/jason/env/local/lib/python2.7/site-packages/sqlserver_ado/dbapi.py", line 183, in connect
    import pythoncom

我试过pip install pypipwin32。

当我使用python3运行django时,我得到 ImportError:没有名为'sqlserver_ado'的模块

如果有人能够朝着正确的方向推动我,那将是值得赞赏的。

为了完整起见,以下是我对tsql的一些尝试,但同样,我的连接一直被拒绝:

/etc/odbc.ini

[DARKTOWER_SQLEXPRESS]
Description=Test
Driver=FreeTDS
Database=DB
Servername=DARKTOWER\\SQLEXPRESS
port=56988
TDS_Version=7.2

/etc/odbcinst.ini

[ODBC]

    Trace = Yes
    TraceFile = /tmp/odbc.log

    [FreeTDS]
    Description = v0.91 with protocol v7.2
    Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
    Setup =  /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
    UsageCount = 1

/etc/freetds/freetds.conf

[DARKTOWER]
        host = DARKTOWER\\SQLEXPRESS
        port = 56988
        tds version = 7.2

使用这些设置取得了一些成功。不喜欢使用域帐户...

'default': {      
        'ENGINE': 'sql_server.pyodbc', #'sqlserver_ado', #'sql_server.pyodbc',
        'HOST': 'DARKTOWER\\SQLEXPRESS',
        'PORT': '56988',
        'USER': 'DOMAIN\\Jason',
        'PASSWORD': 'xxxxxxxxxxxx',
        'NAME': 'DB',
        'AUTOCOMMIT': True,
         'OPTIONS':{
              'driver': 'FreeTDS',
              'host_is_server': True,
              'extra_params': 'tds_version=7.2',},
     }

我仍然对其他人的解决方案感兴趣。

1 个答案:

答案 0 :(得分:0)

尝试使用以下内容:

'default': {
    'ENGINE': 'sqlserver',
    'HOST': 'aws2.myhost.com',
    'PORT': '1433',
    'USER': 'xxxxx',
    'PASSWORD': 'nbxxxa$$sxxxxxts$$xxxx',
    'NAME': 'MyDBName',
而不是你拥有的。我有与你相同的sql pip条目,这就是我连接到sql server时我的settings.py看起来的样子