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

时间:2018-04-09 07:18:20

标签: python sql-server python-3.x odbc pyodbc

您好我目前在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()

3 个答案:

答案 0 :(得分:4)

您可以使用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.)')

答案 1 :(得分:0)

您可以使用 Dim DepCom As New SqlCommand("Select * From Departments", con) Dim DepAdap As New SqlDataAdapter(DepCom) Dim DepDT As New DataTable DepAdap.Fill(DepDT) ListBox1.DataSource = DepDT ListBox1.DisplayMember = "DepartmentName" ListBox1.ValueMember = "DepartmentID" / try块,仅捕获except

pyodbc.Error
祝你好运!

答案 2 :(得分:0)

正如@Adonis建议的那样,考虑构建一个特定于每个用户的配置文件,然后将其读入以连接到数据库。这也提供了更高的安全性,因为代码不会立即公开凭证:

构建配置 .ini文件(要对每个用户运行一次;调整所需文件夹的写入路径)

import configparser
config = configparser.ConfigParser()
config['SQL_SERVER'] = {'DRIVER': 'ODBC Driver 13 for SQL Server',
                        'SERVER': '****',
                        'DATABASE': '****',
                        'Trusted_Connection': 'yes',
}

with open('db_connect.ini', 'w') as configfile:
    config.write(configfile)

数据库连接 (常规连接,调整所需文件夹的读取路径)

import configparser
import pyodbc

config = configparser.ConfigParser()    
config.read('db_connect.ini')

constr = 'DRIVER={{{drv}}};SERVER={srv};DATABASE={db};Trusted_Connection={tc};'\
              .format(drv=config['SQL_SERVER']['DRIVER'],
                      srv=config['SQL_SERVER']['SERVER'],
                      db=config['SQL_SERVER']['DATABASE'],
                      tc=config['SQL_SERVER']['Trusted_Connection'])

conn = pyodbc.connect(constr)