如何在Linux VM上从Django应用程序连接到Azure SQL数据库

3

我搜索了有关在Linux虚拟机上使用SQL Azure数据库与Django应用程序配合使用的教程或完整解释。

我像这样更改了settings.py中的数据库部分

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'azure_database_name',
        'USER': 'user@server_name_like_wjrnvlwjrng3',
        'PASSWORD': 'my_pass',
        'HOST': 'server_name_like_wjrnvlwjrng3.database.windows.net',
        'PORT': '1433',
        'OPTIONS': {
            'driver': 'FreeTDS',
            'TDS_Version': '7.1',
        }
    }
}

I append

[MyDb]
    host = server_name_like_wjrnvlwjrng3.database.windows.net
    port = 1433
    tds version = 7.1

转到 /etc/freetds/freetds.conf

并更改 /etc/odbc.ini

[MyDb]
Description     = ololo lalala text
Driver          = FreeTDS
Servername      = server_name_like_wjrnvlwjrng3
Database        = azure_database_name
UID             = user@server_name_like_wjrnvlwjrng3
PWD             = my_pass
Port            = 1433
Charset         = UTF-8

之后,我尝试调用python manage.py migrate命令,但是出现了错误。

django.db.utils.Error: ('001', '[001] [nxDC[reD]SLSre]nbet onc odt ore (0) (SQLDriverConnect)')

Please, help me with it.


1
SQL Azure并不是Django官方支持的。虽然有一个基于ADO的MS SQL适配器,但只能在Windows上运行。 - Klaus D.
@KlausD. 哦...谢谢,新问题=) 是否存在使用Azure数据库而不是在VM上部署MySQL(或其他)的方法? - Kirill Shalnov
通常情况下,您会对官方支持的数据库之一感到非常满意。具有第三方支持的数据库可能会让您感到满意(或不满意),其他所有内容都无法正常工作。详情请参见https://docs.djangoproject.com/en/1.8/ref/databases/。 - Klaus D.
1个回答

7

以下是在Linux机器上使用pymssql和FreeTDS连接Python和Django到SQL Azure数据库的方法。

以下是具体步骤:

在终端中,导航到manage.py所在的目录。安装以下软件包:

sudo apt-get update  
sudo apt-get install freetds-dev freetds-bin
sudo apt-get install python-dev python-pip
sudo pip pymssql

你需要在你的环境中安装FreeTDS和Pymssql,这将允许你连接到SQL数据库。你正在尝试在Linux机器上使用pyodbc原生地与Django一起访问你的SQL Azure数据库,但目前这是不可能的。
安装完这些包后,你可以使用以下Python代码创建表格、插入/更新行并选择所有内容。为了简单/测试,你可以将代码放在你的views.py脚本中。确保你已经创建了一个数据库,以便在其中创建你的表格,否则它会选择默认值。
# Connect
import pymssql
conn = pymssql.connect(server='test.database.windows.net', user='newuser@test', password='yourpassword', database='sampledatabase')
cursor = conn.cursor()

#Create
cursor.execute("""
IF OBJECT_ID('votes', 'U') IS NOT NULL
    DROP TABLE votes
CREATE TABLE votes (
    name VARCHAR(100),
    value INT NOT NULL,
    PRIMARY KEY(name)
)
""")

#Insert
cursor.executemany(
    "INSERT INTO votes VALUES (%s, %d)",
    [('NodeJS', '0'),
     ('Python', '0'),
     ('C#', '0')])
# you must call commit() to persist your data if you don't set autocommit to True
conn.commit()

        #Select
 cursor.execute('SELECT * FROM votes')
     result = ""
     row = cursor.fetchone()
     while row:
         result += str(row[0]) + str(" : ") + str(row[1]) + str(" votes")
         result += str("\n")
         row = cursor.fetchone()
     print result

我们刚刚创建了一个名为votes的表格,插入了内容,并使用select语句打印了所有内容。希望这能帮到你。如果您仍需要帮助,请不要犹豫与我们联系。我有一份步骤指南,如果需要,可能会对您有所帮助。

谢谢,我现在考虑在同一台虚拟机上使用本地MySQL数据库,并将其配置为主-主复制。 - Kirill Shalnov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接