windows 下 使用 pyodbc 连接 SQL Server 数据库

Python 连接 SQL Server 数据库通常有俩种方法,一种是 pymssql + FreeTDS,另一种是 pyodbc + ODBC driver,在 windows 环境下我选择了第二种方法。

前置条件

  • 安装了 Python 的 windows 机器,我是 Python 3.6 + virtualenv;
  • SQL Server 服务器,我在本地安装了 SQL Server 2017 Express。

步骤

安装 pyodbc

pip install pyodbc 搞定。

安装 odbc 驱动并配置 DSN

首先下载 Microsoft ODBC Driver 17 for SQL Server 并安装。
此时如果尝试用pyodbc连接,会有未发现数据源名称并且未指定默认驱动程序错误,需要配置 DSN(Data Source Name)。

  1. 打开 开始菜单-> windows管理工具->ODBC数据源

  2. 添加数据源,根据SQL Server版本选择合适的驱动:
    file

  3. 填写服务器信息:
    file

  4. 填写身份验证信息:
    file

  5. 选择数据库:
    file

  6. 设置更多选项,这里我把 use strong encryption for data 去掉了:
    file

  7. 完成并测试连接:
    file

Python 代码连接数据库

我使用了 SQLAlchemy 作为 orm,示例如下:

from settings import MSSQL_CONF
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

mssql_str = 'mssql+pyodbc://%s:%s@%s' % (
    MSSQL_CONF.get('user', ''),
    MSSQL_CONF.get('password', ''),
    MSSQL_CONF.get('dsn', ''),
)
mssql_engine = create_engine(mssql_str)
MssqlSession = sessionmaker(bind=mssql_engine)

使用 sqlacodegen 建好 Model:
sqlacodegen mssql+pyodbc://sa:111111@test > models.py
之后可以进行 SQLAlchemy 的常规操作:

from models import User

mssql_session = MssqlSession()
user = User(name='test', id='1')
mssql_session.add(user)
mssql_session.commit()

参考资料