有很多箍要跳过。威尔的回答概述了其中很多。
经过一番努力,我设法让它与 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 的数据库(来自 docker-compose 文件环境变量的 DB_NAME)。注意:因为我们已经创建了指向db 服务(运行MS SQL)的链接,所以我们可以使用主机名db。如果您要连接到外部 MS SQL 设置,您显然不需要 db 服务(并相应地编辑您的连接字符串)
如果您使用 Django,则有 a more complete example in the 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",
}
}
}