簡體   English   中英

將Django連接到MSSQL Server Express 2014數據庫

[英]Connecting Django to MSSQL Server Express 2014 database

我正在使用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,並且願意一口氣就跳起來。

所以我的數據庫定義看起來像這樣:

'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',},
     }

我仍然對其他人的解決方案感興趣。

嘗試使用如下所示的內容:

'default': {
    'ENGINE': 'sqlserver',
    'HOST': 'aws2.myhost.com',
    'PORT': '1433',
    'USER': 'xxxxx',
    'PASSWORD': 'nbxxxa$$sxxxxxts$$xxxx',
    'NAME': 'MyDBName',

而不是你所擁有的。 我有與您相同的sql pip條目,這就是我連接到sql server時settings.py的外觀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM