Jos*_*ton 47 python sql-server django pyodbc
有没有人最近有部署带有SQL Server数据库后端的Django应用程序的经验?我们的工作场所大量投入SQL Server,如果没有足够开发的后端,它将不支持Django.
我知道mssql.django-pyodbc和django-mssql是非正式支持的后端.这两个项目似乎只有一个人贡献,这有点担心,虽然贡献似乎有点规律.
是否有很好的支持SQL Server的任何其他后端?我在这里提到的两个"足够好"用于生产吗?你有什么经历?
Jas*_*ker 21
如前所述,django-pyodbc是一个很好的方式.PyODBC可能是Python最成熟的SQL Server库.
您可能遇到的唯一问题是pyodbc不能很好地支持存储过程(您可以调用它们,但是您无法从它们获得结果).您可以使用pymssql调用它们,但是如果可能的话我会避免它,因为它不支持标准的DB-API接口并且可能会有变化.如果你需要这样做,你最好的选择是直接使用adodbapi(它包含在python win32包中,你最终可能会安装它).
sha*_*adi 15
这些日子
./manage.py migrate
编辑:这是包版本
Django==1.11.6
django-mssql==1.8
pyodbc==4.0.19
django-pyodbc==1.1.1
django-pyodbc-azure==1.11.0.0
Run Code Online (Sandbox Code Playgroud)
这是这个问题的"现代"答案.我成功地在生产Ubuntu 16.04服务器上部署了Django 1.11,该服务器连接到在另一台服务器上运行的MS SQL Server 2017.
首先,安装本机MS ODBC驱动程序"SQL Server的ODBC驱动程序17":
# https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#ubuntu-1404-1604-and-1710
sudo su
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
ACCEPT_EULA=Y apt-get install msodbcsql
apt-get install unixodbc-dev
# test you can actually get to port 1433 on the server that is running MS SQL:
nc -z -v -w5 host.where.sql.server.is.running.com 1433
# add /opt/mssql-tools/bin to your PATH in .bash_profile, e.g.:
# PATH="$HOME/bin:$HOME/.local/bin:/opt/mssql-tools/bin:$PATH"
# source ~/.bash_profile
# now, test that you can actually connect to MS SQL Server:
sqlcmd -S host.where.sql.server.is.running.com -U db_username -P db_password
Run Code Online (Sandbox Code Playgroud)
其次,确保你pip install
这些模块:
# https://github.com/michiya/django-pyodbc-azure
django-pyodbc-azure==1.11.9.0
# https://github.com/mkleehammer/pyodbc/wiki
pyodbc==4.0.22
Run Code Online (Sandbox Code Playgroud)
第三,修改Django的DATABASES条目settings.py
:
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'db_name',
'USER': 'db_username',
'PASSWORD': 'db_password',
'HOST': 'host.where.sql.server.is.running.com',
'PORT': '1433',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
'isolation_level': 'READ UNCOMMITTED', # prevent SELECT deadlocks
},
},
}
Run Code Online (Sandbox Code Playgroud)
我省略了我的其余配置(nginx,Gunicorn,Django REST Framework等),但这超出了这个答案的范围.
更新:这已经在生产中运行了6个多月,当多个连接在同一个表上执行SELECT查询时,没有任何问题超出MS SQL Server特定的死锁,这已经通过isolation_level
设置修复.该系统每天大约有2k新用户.
使用下面的Microsoft 官方包将 SQL Server 连接到 Django。
pip install mssql-django
Run Code Online (Sandbox Code Playgroud)
设置
DATABASES = {
'default': {
'ENGINE': 'mssql',
'NAME': 'mydb',
'USER': 'user@myserver',
'PASSWORD': 'password',
'HOST': 'myserver.database.windows.net',
'PORT': '',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
},
},
}
# set this to False if you want to turn off pyodbc's connection pooling
DATABASE_CONNECTION_POOLING = False
Run Code Online (Sandbox Code Playgroud)
更多信息: https: //github.com/microsoft/mssql-django
归档时间: |
|
查看次数: |
34030 次 |
最近记录: |