Python 将FreeTDS与Django一起使用

Python 将FreeTDS与Django一起使用,python,sql-server,heroku,freetds,unixodbc,Python,Sql Server,Heroku,Freetds,Unixodbc,我的头撞在墙上,我希望至少能在这里找到一些方向。。。我在Django中构建了一个应用程序,它依赖于Azure上的MSSQL数据库。我已经能够在Heroku上成功部署我的应用程序,但无法访问SQL数据库,因为Heroku不支持MSSQL数据库驱动程序。我读过,通过使用FreeTDS和UnixODBC的组合可以访问数据库,但找不到任何说明如何访问的文档。是否有人对FreeTDS或UnixODBC有任何了解,至少可以为我指明正确的方向 提前感谢。就最佳实践而言,将Django连接到SQL Server

我的头撞在墙上,我希望至少能在这里找到一些方向。。。我在Django中构建了一个应用程序,它依赖于Azure上的MSSQL数据库。我已经能够在Heroku上成功部署我的应用程序,但无法访问SQL数据库,因为Heroku不支持MSSQL数据库驱动程序。我读过,通过使用FreeTDS和UnixODBC的组合可以访问数据库,但找不到任何说明如何访问的文档。是否有人对FreeTDS或UnixODBC有任何了解,至少可以为我指明正确的方向


提前感谢。

就最佳实践而言,将Django连接到SQL Server始终是一个移动的目标。我是FreeTDS驱动程序的长期用户,它与
pyodbc
django-pyodbc-azure
一起提供了使用SQL Server运行django所需的堆栈。然而,微软的驱动程序在Linux上已经走了很长的路,我已经改用它们。以下是有关连接的说明:

步骤1:安装Microsoft Linux ODBC驱动程序

您也可以使用FreeTDS,但在撰写本文时,我建议您使用Microsoft驱动程序;安装说明如下:

步骤2:验证安装

如果一切正常,您应该能够通过查看/etc/odbcinst.ini来验证安装;它应该有一个类似这样的部分

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1
UsageCount=1
注意文件的节头:
ODBC驱动程序17 for SQL Server
。稍后,我们将使用它来引用驱动程序

步骤3:在SQL Server中设置服务用户

为了获得最佳安全实践,我建议为您拥有的每个Django项目设置一个单独的用户。以下脚本将在SQL Server中创建数据库、登录名、用户和密码,并具有运行Django所需的最低权限

/*
This Script Creates a SQL Server Database, Login and User
With Appropriate Permissions for a Production Django Project
with migrations. Simply fill out the variables below (@db_name and @db_password)
Username will be set to database name + '_user' by default.
*/
DECLARE @db_name VARCHAR(MAX) = 'project'
DECLARE @db_password VARCHAR(MAX) = 'project_password'
DECLARE @db_user VARCHAR(MAX) = @db_name + '_user'
--
--
USE master
DECLARE @cmd VARCHAR(MAX)
-- Server scope: create SQL Server login and permissions
SET @cmd = 'CREATE LOGIN ' + @db_user + ' WITH PASSWORD = ''' + @db_password + ''''
EXEC(@cmd)
SET @cmd = 'GRANT VIEW SERVER STATE TO ' + @db_user
EXEC(@cmd)
SET @cmd = 'CREATE DATABASE [' + @db_name + ']'
EXEC(@cmd)
-- DB scope: create user for server login and permissions
SET @cmd = 'USE [' + @db_name + '];'
SET @cmd = @cmd + 'CREATE USER ' + @db_user + ' FOR LOGIN ' + @db_user + ';'
SET @cmd = @cmd + 'GRANT SELECT, INSERT, UPDATE, DELETE, ALTER, CREATE TABLE, REFERENCES, EXEC TO ' + @db_user
EXEC(@cmd)
步骤4:设置Django

为你的Django项目启动你的VirtualNV。我们将安装django pyodbc azure(它也将安装pyodbc)

然后,我们修改Django设置

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': 'dbserver.your-domain.com',
        'PORT': '1433',
        'NAME': 'project',
        'USER': 'project_user',
        'PASSWORD': 'project_password',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
            'unicode_results': True,
        },
    },
}
步骤5:运行初始迁移

如果一切正常,您现在应该能够运行初始迁移,并在SQL Server数据库中查看Django的初始表。你可能还想在这里看到这篇文章,它有一些特定于Heroku的说明:


祝你好运

谢谢大家!!这可能是个愚蠢的问题。。。但是如何在Heroku上查看/etc/odbcinst.ini?有没有让我查看文件内容的命令?不幸的是,我自己从未使用过Heroku-对不起!
DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': 'dbserver.your-domain.com',
        'PORT': '1433',
        'NAME': 'project',
        'USER': 'project_user',
        'PASSWORD': 'project_password',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
            'unicode_results': True,
        },
    },
}