有很多箍要跳过。威尔的回答概述了其中很多。
经过一番努力,我设法让它与 Docker 一起工作(所以这应该可以在任何运行 docker 的地方工作)。
我已经使用 Python 3.6 和 Python 2.7 测试了设置:使用 pyodbc==3.0.10、django-pyodbc-azure 和 Django 1.10.4(此设置适用于 Django,但也适用于 vanilla python)。
我创建了一个可以使用的公共图像:https ://hub.docker.com/r/toast38coza/python-mssql/
这是一个简单的工作docker设置:
version: "3"
services:
db:
restart: on-failure:10
image: microsoft/mssql-server-linux:latest
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=SuperSecret(!)100
ports:
- "1433:1433"
py:
image: toast38coza/python-mssql
links:
- db
environment:
- SA_PASSWORD=SuperSecret(!)100
- DB_NAME=mydb
现在你可以运行:
docker-compose run --rm py python
它将在py
上面的服务中运行 python cli
然后尝试创建一个数据库:
>>> import pyodbc, os
>>> db_name = os.environ.get('DB_NAME')
>>> pwd = os.environ.get('SA_PASSWORD')
>>> connection_string = "driver=FreeTDS;server=db;PORT=1433 database=master;UID=sa;PWD={};TDS_Version=8.0;".format(pwd)
>>> conn = pyodbc.connect(connection_string, autocommit=True)
>>> conn.execute('create database {}'.format(db_name))
<pyodbc.Cursor object at 0x7fb3067f0e70>
那应该创建一个名为mydb
(DB_NAME
来自 docker-compose 文件环境变量)的数据库。注意:因为我们已经创建了到db
服务的链接(运行 MS SQL),所以我们可以使用主机名db
。如果您要连接到外部 MS SQL 设置,您显然不需要该db
服务(并相应地编辑您的连接字符串)
如果您使用的是 Django,repo 中有一个更完整的示例,但是,请注意,您需要settings
看起来像这样:
DATABASES = {
'default': {
'ENGINE': "sql_server.pyodbc",
'HOST': "db",
'PORT':'1433',
'USER': "sa",
'PASSWORD': os.environ.get('SA_PASSWORD'),
'NAME': os.environ.get('DB_NAME'),
'OPTIONS': {
"driver": "FreeTDS",
"host_is_server": True,
"unicode_results": True,
"extra_params": "tds_version=8.0",
}
}
}