在函数Python中抽象pyodbc连接



我正在运行许多需要访问SQL数据库的不同服务器的python脚本。我希望能够抽象出一些使用pyodbc进行连接的繁重工作。在一个单独的py文件中,我定义了默认的驱动程序和服务器(将来我希望能够添加到这个文件中,以便不同的服务器易于访问)并尝试编写一个函数,返回一个pandas数据框作为结果,这样我就不会为了查询一些数据而不停地连接和断开服务器。我是这么想的。

#imports
import pyodbc
import pandas as pd 
default_driver = 'driverName'
default_server = 'serverName'
def sql_query(query, driver = default_driver, server = default_server):
#accepts a T-SQL query, connects to the default server using the default driver 
#returns a pandas datafram of the data 
try:
driver_server_string = 'DRIVER={' + str(driver) + '}; SERVER=' + str(server) +';TRUSTED_CONNECTION=YES;'
conn = pyodbc.connect(driver_server_string)
cursor = conn.cursor()
result = cursor.execute(query)
data = cursor.fetchall()
result = pd.DataFrame(data=data)
return result
except pyodbc.ProgrammingError:
print('SQL Query returned an error')
finally:
cursor.close()
conn.close()

现在我遇到两个错误我也不确定这是否是实现我目标的最好方式。使用:

导入此函数
from environments import sql_query

返回NameError: name 'sql_query' is not defined

甚至在同一个脚本中,我得到一个未找到的模块原来的错误是:导入_multiarray_umath时DLL加载失败:指定的模块无法找到。

理想情况下,我想能够有连接到一个sql服务器简单的从pyFile中导入somecl分类函数

data = sql_query('query',server = 'serverName')并从结果中得到一个熊猫df。谢谢!

根据上下文,我会说你所做的很好。

错误1:我认为我们没有足够的信息来回答。像这样的导入错误很可能是由于文件结构的设置方式导致其他脚本无法看到它。

error 2 (_multiarray_umath):具体是哪一行给出的错误?

仅供参考,Pandas有一个函数,你可以给它一个连接和查询,它只会返回一个数据帧:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_sql.html

最新更新