首先下载SQL Server2017的最新镜像:
为了运行,需要调整Docker的运行RAM大小最小为4GB:
启动一个容器(注意,命令的参数中,在Linux/Mac平台下是单引号,而在Windows平台下是双引号):
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=
(初始密码必须为
SQL Server2017容器已经启动好了。
为了可以持久化数据,实际使用需要加-v参数来映射数据卷到/var/opt/mssql
修改SA用户的密码
docker exec -it sql_server2017 /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '
如果密码过于简单会报如下错误,我们设复杂一点的即可:
连接到SQL Server容器
docker exec -it sql_server2017 "sh" --> 从启动的容器信息看到,使用的shell是/bin/sh,因此需要使用"sh"
进入容器后,连接到数据库:
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'jin*******'
登录数据库后会出现提示符:'1>'
再输入命令后,需要执行go才会执行上面输入的语句。
上面是在容器内进行的,下面回到宿主机,这里是Mac系统进行编程连接,首先,需要安装Homebrew:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
接着安装ODBC驱动和针对SQL Server的SQL命令行工具
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
ACCETP_EULA=y brew install --no-sandbox msodbcsql mssql-tools
安装成功后,现在来连接容器的数据库,命令如下:
sqlcmd -S 127.0.0.1 -U sa -P **** (此时,该命令是在宿主机下执行的了)
查看下数据库版本:
正常连接。现在基于python来测试下,首先需要安装针对sql server的python驱动: pip install virtualenv,然后依次执行如下命令:
注意,此时使用的是venv目录下的python:
为了测试,建立一个测试的数据库:
sqlcmd -S 127.0.0.1 -U sa -P **** -Q "CREATE DATABASE IHouse;"
创建一个表:
sqlcmd -S 127.0.0.1 -U sa -P jingtian,nuli9 -Q "use IHouse; CREATE TABLE test(id int, name varchar(10));"
编写python测试脚本:
import pyodbc
server='127.0.0.1' # localhost会连接超时,需要为IP地址
database='IHouse'
username='sa'
password='*****'
cnxn=pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+password)
cursor=cnxn.cursor()
print('insert data...')
tsql = "INSERT INTO test (id, name) VALUES(?,?);"
with cursor.execute(tsql, 1, 'Jim'):
print ('Insert OK.')
print('Read data...')
tsql = "SELECT * FROM test;"
with cursor.execute(tsql):
row = cursor.fetchone()
while row:
print(str(row[0]) + " " + str(row[1]))
row = cursor.fetchone()
结果
: