【问题标题】:Troubles of making Django Models work on MS-SQL on MS Azure?让 Django 模型在 MS Azure 上的 MS-SQL 上工作的麻烦?
【发布时间】:2016-03-14 13:22:01
【问题描述】:

我想在 Azure 上创建一个 django web。

我一整天都在尝试将我的模型类连接到 Azure 上现有的 MSSQL 数据库。

还是不行。我的手已经试过了。

我列出了我的步骤,希望有人帮助我,非常感谢!

步骤 1。安装依赖库

sudo pip install --upgrade pip
sudo pip install django-pyodbc
sudo pip install django-sqlserver
sudo pip install django-mssql
sudo pip install django-pyodbc-azure
brew install freetds
brew install freetds --with-unixodbc

步骤 2。配置编写

~/.bash_profile
    #ODBC
    export ODBCSYSINI=/usr/local/opt/unixodbc/etc
    export ODBCINI=/usr/local/opt/unixodbc/etc/odbc.ini

/etc/odbcinst.ini
    [FreeTDS]
    Driver=/usr/local/lib/libtdsodbc.so
    Setup=/usr/local/lib/libtdsodbc.so
    Server={host}
    UsageCount=1
    Port=1433
    Database={db name}
    User={user name}
    Password={password}
    TDS_Version=7.2
    client_charset=utf-8

/etc/odbc.ini
    [FreeTDS]
    Driver = FreeTDS
    ServerName = {hostname}
    Database = {db name}
    UserName = {user name}
    Password = {password}
    Port = 1433
    Protocol = 7.2
    TDS_Version = 8.0

第 3 步。尝试连接数据库。

tsql -S FreeTDS -p 1433 -U {user name} -P {password}

It’s ok to connect to ‘INFORMATION_SCHEMA’ DB。

But when I try:

    tsql -S FreeTDS -p 1433 -U {user name} -P {password} -D {database name}

I had problems:

    Msg 4075 (severity 16, state 1) from {hostname} Line 1:
        "The USE database statement failed because the database collation Chinese_Traditional_Stroke_Order_100_CS_AS_WS is not recognized by older client drivers. Try upgrading the client operating system or applying a service update to the database client software, or use a different collation. See SQL Server Books Online for more information on changing collations."
    Msg 18456 (severity 14, state 1) from {hostname} Line 1:
        "Login failed for user ‘{user name}’.”
    Error 20002 (severity 9):
        Adaptive Server connection failed
    There was a problem connecting to the server

If I try “tsql -S FreeTDS -p 1433 -U {user name} -P {password}” and under,

1> USE somedb
2> go
    Msg 40508 (severity 16, state 1) from {hostname} Line 1:
        "USE statement is not supported to switch between databases. Use a new connection to connect to a different database."

problems again. (I found some pages to says: USE is not work at a MSSQL DB on Azure)

第四步。试试:python manage.py inspectdb > models.py

django.db.utils.Error: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

第五步。尝试模型

settings.py
    DATABASES = {
        'default': {
            'ENGINE': 'sql_server.pyodbc',
            'NAME': ‘{database name}’,
            'USER': ‘{user name}’,
            'PASSWORD': ‘{password}’,
            'HOST': ‘{hostname}’,
            'PORT': '1433',
            'OPTIONS': {
                'driver': 'FreeTDS',
            },
        }
    }

and

$python manage.py shell

>>> from app.models import {ModelName}
>>> {ModelName}.objects.all()

    Error: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

(again, no surprise.)

环境:

  1. Python:2.7.10
  2. Django:1.9.4(最终版)
  3. MS-SQL 服务器版本:V12
  4. 操作系统:Mac OSX 10.11.3
  5. FreeTDS:0.95.80
  6. 其他

    pyobjc-core (2.5.1)
    pyobjc-framework-Accounts (2.5.1)
    pyobjc-framework-AddressBook (2.5.1)
    pyobjc-framework-AppleScriptKit (2.5.1)
    pyobjc-framework-AppleScriptObjC (2.5.1)
    pyobjc-framework-Automator (2.5.1)
    pyobjc-framework-CFNetwork (2.5.1)
    pyobjc-framework-Cocoa (2.5.1)
    pyobjc-framework-Collaboration (2.5.1)
    pyobjc-framework-CoreData (2.5.1)
    pyobjc-framework-CoreLocation (2.5.1)
    pyobjc-framework-CoreText (2.5.1)
    pyobjc-framework-DictionaryServices (2.5.1)
    pyobjc-framework-EventKit (2.5.1)
    pyobjc-framework-ExceptionHandling (2.5.1)
    pyobjc-framework-FSEvents (2.5.1)
    pyobjc-framework-InputMethodKit (2.5.1)
    pyobjc-framework-InstallerPlugins (2.5.1)
    pyobjc-framework-InstantMessage (2.5.1)
    pyobjc-framework-LatentSemanticMapping (2.5.1)
    pyobjc-framework-LaunchServices (2.5.1)
    pyobjc-framework-Message (2.5.1)
    pyobjc-framework-OpenDirectory (2.5.1)
    pyobjc-framework-PreferencePanes (2.5.1)
    pyobjc-framework-PubSub (2.5.1)
    pyobjc-framework-QTKit (2.5.1)
    pyobjc-framework-Quartz (2.5.1)
    pyobjc-framework-ScreenSaver (2.5.1)
    pyobjc-framework-ScriptingBridge (2.5.1)
    pyobjc-framework-SearchKit (2.5.1)
    pyobjc-framework-ServiceManagement (2.5.1)
    pyobjc-framework-Social (2.5.1)
    pyobjc-framework-SyncServices (2.5.1)
    pyobjc-framework-SystemConfiguration (2.5.1)
    pyobjc-framework-WebKit (2.5.1)
    pyodbc (3.0.10)
    django-mssql (1.6.2)
    django-pyodbc-azure (1.9.3.0)
    django-sqlserver (1.7)
    

【问题讨论】:

    标签: python sql-server django azure model


    【解决方案1】:

    根据我的经验,您似乎需要在 Mac OS 上的 odbc.ini 文件中配置 FreeTDS 的驱动程序 /usr/local/lib/libtdsodbc.so

    a similiar answered thread可以参考,建议使用pymssql包连接Azure SQL数据库。另外,您可以查看 Azure 官方文档Connect to SQL Database by using Python on Ubuntu Linux

    【讨论】:

    • 我试过了,还是不行。我的环境是 Mac OSX。
    • @wuufone 在大多数情况下,MacOSX 的使用与 Linux 类似。很抱歉没有在Mac环境下重现您的问题,但我建议您可以尝试使用搜索引擎搜索Linux的配置,并参考相关文章重新配置。
    【解决方案2】:

    我遇到了同样的“自适应服务器”错误。

    我使用 django db 配置的“OPTIONS”部分中的选项“host_is_server”解决了:

    DATABASES = {
        'default': {
            'ENGINE': 'sql_server.pyodbc',
            'NAME': 'db',
            'USER': 'user',
            'PASSWORD': 'xxxxxx',
            'HOST': 'host',
            'PORT': '1433',
    
            'OPTIONS': {
                'driver': 'FreeTDS',
                'host_is_server': True,
            },
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      相关资源
      最近更新 更多