如何解决Pyodbc查询以功能格式工作,但是以面向对象的方式实施时会产生Windows致命异常
我正在查询多个SQL数据库并将它们组合到一个表中。为了便于讨论,我使用伪代码描述查询,因为我不想公开提供有关数据库的信息。但是,查询不是问题,因此在此示例中应该不成问题。
为了首先确保代码正确运行,我在Jupiter笔记本中实现了其功能版本。我使用的代码如下所示,当插入实际查询时,它可以正常工作。
import pyodbc
import pandas as pd
# This code works in Jupyter notebook using a Python 3.8
conn = pyodbc.connect("Driver={XXXX};"
"Server=XXXX;"
"uid=XXXX;"
"pwd=XXXX")
df = pd.read_sql_query("query goes here",conn)
下一步是将实际.py
文件中的代码实现为面向对象的代码,如下所示。
class OpenDB:
def __init__(self):
# - will pass variables in class instantiation once
# I get the classes working correctly
self.conn = pyodbc.connect("Driver={XXXX};"
"Server=XXXX;"
"uid=XXXX;"
"pwd=XXXX")
self.cur = self.conn.cursor()
# ----------------------------------------------------------------------------
def close_database_connection(self) -> None:
self.conn.close()
return
# ============================================================================
# ============================================================================
class ReadDB(OpenDB):
def __init__(self):
OpenDB.__init__(self)
# ----------------------------------------------------------------------------
def read_data(self) -> pd.DataFrame:
df = pd.read_sql_query("query goes here",self.conn)
# - The code fails after the above line and never gets to
# the line below this
self.close_database_connection()
return df
# ============================================================================
# ============================================================================
db = ReadDB()
df = db.read_data()
上面编写的面向对象的代码似乎与Jupiter笔记本中使用的代码完全相同;但是,当我如上所述运行它时,查询失败并返回错误Windows fatal exception: access violation error
。两种实现之间的查询是相同的,并且为建立数据库连接而传递的信息是相同的。谁能看到为什么Jupiter Notebook实现有效而面向对象的版本无效的原因?两者都使用Python 3.8。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com(将#修改为@)