在Python 3中使用Pyodbc自动检测ODBC驱动程序

Dan*_*Lee 2 python sql-server odbc pyodbc python-3.x

嗨,我目前在Python 3中使用pyodbc,并且试图通过无需在不同计算机上进行手动更改而自动检测ODBC驱动程序的方法。原因是因为我的计算机具有ODBC驱动程序13,而另一位朋友的计算机具有ODBC驱动程序11,因此无论何时从侧面运行脚本,都必须先手动更改版本才能执行该过程。

谁能帮助解决这个问题?以下是我的示例代码。

谢谢

import os
import csv
import pyodbc
import datetime
from dateutil.relativedelta import relativedelta


conn = pyodbc.connect(
    r'DRIVER={ODBC Driver 13 for SQL Server};'
    r'SERVER=****;'
    r'DATABASE=****;'
    r'Trusted_Connection=yes;'
    )

cursor = conn.cursor()

cursor.execute("Select * From Table1")
dData = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)

Gor*_*son 6

您可以使用该pyodbc.drivers()方法来检索可用驱动程序列表,然后选择所需的驱动程序,例如,

driver_name = ''
driver_names = [x for x in pyodbc.drivers() if x.endswith(' for SQL Server')]
if driver_names:
    driver_name = driver_names[0]
if driver_name:
    conn_str = 'DRIVER={}; ...'.format(driver_name)
    # then continue with ...
    # pyodbc.connect(conn_str)
    # ... etc.
else:
    print('(No suitable driver found. Cannot connect.)')
Run Code Online (Sandbox Code Playgroud)


Fli*_*rPA 0

您可以使用try/except块,仅捕获pyodbc.Error

import os
import csv
import pyodbc
import datetime
from dateutil.relativedelta import relativedelta


try:
    conn = pyodbc.connect(
        r'DRIVER={ODBC Driver 13 for SQL Server};'
        r'SERVER=blah;'
        r'DATABASE=blah;'
        r'Trusted_Connection=yes;'
    )
except pyodbc.Error:
    conn = pyodbc.connect(
        r'DRIVER={ODBC Driver 11 for SQL Server};'
        r'SERVER=blah;'
        r'DATABASE=blah;'
        r'Trusted_Connection=yes;'
    )


cursor = conn.cursor()

cursor.execute("Select * From Table1")
dData = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)

祝你好运!