pyodbc + SQLAlchemy

使用pyodbc+sqlalchemy方式连接SQL Server

在Windows环境下:

如何解决【[ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序】问题?

是否需要安装ODBC驱动?

DSN如何使用?

仅使用pyodbc连接SQL Server

不创建DSN

最简单的方式如下:

import pyodbc

SERVER = '127.0.0.1'
DATABASE = 'AIS1624'
UID = 'sa'
PWD = '123456'
DRIVER = 'SQL Server'

conn = pyodbc.connect(DRIVER=DRIVER, SERVER=SERVER, DATABASE=DATABASE, UID=UID, PWD=PWD)
cursor = conn.cursor()
cursor.execute("SELECT TOP 10 * FROM ICSTOCKBILL")
row = cursor.fetchone()
while row:
    print(row)
    row = cursor.fetchone()

 上述代码(格式)理论上在一般的环境都能运行成功,对环境的要求也是最简单的:

DRIVER = 'SQL Server' ——指pyodbc.connect()函数的DRIVER参数,也是指系统中已安装的ODBC驱动的版本,可以在【控制面板\系统和安全\管理工具】下的【ODBC 数据源(64 位)】中查看,在【名称】列出现的版本都可以填写。

 

 通常系统默认自带名为SQL Server的驱动,所以DRIVER = 'SQL Server'一般都是OK的,当然,要以实际情况为准,如果没有,则需要安装ODBC Driver

如果实际同时也安装了ODBC Driver 17 for SQL Server,那么使用DRIVER = 'ODBC Driver 17 for SQL Server'也是可以的。

 使用DSN

使用了DSN,代码中就不需要指明DRIVER和SERVER地址,因为这些信息已经绑定在DSN中。

如果需要使用DSN,那么就需要先在【ODBC 数据源(64 位)】中添加DSN:

完成DSN创建之后,连接代码相应修改为:

import pyodbc

DSN = 'TEST_DSN'
UID = 'sa'
PWD = '123456'

conn = pyodbc.connect(DSN=DSN, UID=UID, PWD=PWD)

使用DSN需要的参数少了,但是DSN的名称必须正确,否则报错:[ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

虽然UID、PWD在DSN中已填写,此处仍然需要传入,否则报错:登录失败

使用SQLAlchemy(提供DSN)

create_engine()需要提供DSN名称:

from sqlalchemy import create_engine, text

engine = create_engine("mssql+pyodbc://sa:123456@TEST_DSN")
with engine.connect() as conn:
    result = conn.execute(text("SELECT TOP 10 * FROM ICSTOCKBILL"))
    for i in result:
        print(i)

方言指定为mssql+pyodbc,需要安装pyodbc,但是不需要import pyodbc,因为sqlalchemy会自动加载所需依赖。

使用SQLAlchemy(不提供DSN)

不提供DSN时,URL中需指定驱动程序名称。格式如下:

mssql+pyodbc://sa:123456@127.0.0.1:1433/AIS1624?driver=ODBC+Driver+17+for+SQL+Server

端口默认1433,可以不提供。

此处指定驱动程序为ODBC Driver 17 for SQL Server,需确保环境中已安装该版本程序,或者填写为已安装的版本,名称中的空格用+占位。

 

posted @ 2021-03-07 17:59  Mon's_Works  阅读(1803)  评论(1编辑  收藏  举报