Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python 3中使用Pyodbc自动检测ODBC驱动程序_Python_Sql Server_Python 3.x_Odbc_Pyodbc - Fatal编程技术网

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

在Python 3中使用Pyodbc自动检测ODBC驱动程序,python,sql-server,python-3.x,odbc,pyodbc,Python,Sql Server,Python 3.x,Odbc,Pyodbc,大家好,我目前正在Python3中使用pyodbc,我正试图找到一种自动检测ODBC驱动程序的方法,在不同的计算机使用时不必手动更改。原因是因为我的计算机有ODBC驱动程序13,而另一个朋友的计算机有ODBC驱动程序11,所以每当我们从我们这边运行脚本时,我们必须首先手动更改版本以执行该过程 有人能帮忙解决这个问题吗?下面是我的示例代码 多谢各位 import os import csv import pyodbc import datetime from dateutil.relativede

大家好,我目前正在Python3中使用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()

您可以使用
try
/
块,但
块除外,仅捕获
pyodbc。错误

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()

祝你好运

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

driver\u name=''
驱动程序_name=[x代表pyodbc.drivers()中的x,如果x.endswith('for SQL Server')]
如果驱动程序名称:
驱动程序名称=驱动程序名称[0]
如果驱动程序名称:
conn_str='DRIVER={};…'。格式(驱动程序名称)
#然后继续。。。
#pyodbc.connect(conn_str)
# ... 等
其他:
打印('(未找到合适的驱动程序。无法连接。))

AS @ AdoNs建议,考虑建立一个特定于每个用户的配置文件,然后读取它以连接到数据库。这还提供了更多的安全性,因为代码不会立即公开凭据:

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

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


为什么不将连接字符串放在config.ini中?然后,每个人都可以拥有自己的配置文件,具体取决于您的environment@Adonis谢谢你的反馈,你能给我举个例子吗?这是我第一次使用它,所以举个例子会很棒!我认为
configparser
上的文档解释得很好:如果需要更多,请告诉我
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)