我在使用pyodbc
模块(python3
)时遇到了困难。下面的代码总是使python崩溃(我从DOS终端运行它)。当main()
函数返回时发生崩溃。我的数据源是一个4dv13数据库远程服务器。我使用的是4D-ODBC驱动程序,它看起来安装得很好,但实际上并不高效。我已禁用SSL连接和防火墙。在
class ODBCSource:
def __init__(self, dsn):
self.dsn = str(dsn)
try:
self.con = pyodbc.connect("dsn={}".format(self.dsn))
self.cur = self.con.cursor()
logger.info("ODBC Source DSN='{}' connected.".format(self.dsn))
except Exception as err:
self.con = None
self.cur = None
logger.error("Cannot connect ODBC Source DSN='{}': {}.".format(self.dsn, err))
def __bool__(self):
return not(self.con is None) or not(self.cur is None)
def __str__(self):
return "<cripython.dal.ODBCSource id={:#x} dsn='{}'>".format(id(self), self.dsn)
__repr__ = __str__
# Main Function:
def main():
db = ODBCSource('CRIPI-4D')
# Program Entry Point:
if(__name__ == "__main__"):
main()
Windows崩溃窗口跟踪提供以下信息:
^{pr2}$为了检查ODBC代码中的错误,我可能启用了ODBC跟踪。我在日志中发现了3个错误。在
[...]
odbcsource 1724-2a8 ENTER SQLGetTypeInfo
HSTMT 0x0059B1F0
SWORD 12 <SQL_VARCHAR>
odbcsource 1724-2a8 EXIT SQLGetTypeInfo with return code -1 (SQL_ERROR)
HSTMT 0x0059B1F0
SWORD 12 <SQL_VARCHAR>
DIAG [24000] [Microsoft][ODBC Driver Manager] Invalid cursor state (0)
odbcsource 1724-2a8 ENTER SQLGetTypeInfo
HSTMT 0x0059B1F0
SWORD -9 <SQL_WVARCHAR>
odbcsource 1724-2a8 EXIT SQLGetTypeInfo with return code -1 (SQL_ERROR)
HSTMT 0x0059B1F0
SWORD -9 <SQL_WVARCHAR>
DIAG [24000] [Microsoft][ODBC Driver Manager] Invalid cursor state (0)
odbcsource 1724-2a8 ENTER SQLGetTypeInfo
HSTMT 0x0059B1F0
SWORD -2 <SQL_BINARY>
odbcsource 1724-2a8 EXIT SQLGetTypeInfo with return code -1 (SQL_ERROR)
HSTMT 0x0059B1F0
SWORD -2 <SQL_BINARY>
DIAG [24000] [Microsoft][ODBC Driver Manager] Invalid cursor state (0)
odbcsource 1724-2a8 ENTER SQLFreeStmt
HSTMT 0x0059B1F0
UWORD 0 <SQL_CLOSE>
[...]
顺便说一句,当我从pythonidle运行这个脚本时,我没有发现任何错误。有人知道这段代码出了什么问题吗?我应该如何解决它?在
pyodbc的另一个解决崩溃问题的方法是使用这个本地Python驱动程序来实现4D(p4d),它是由Israel Brewster在Github上创建的。在
p4d驱动程序是根据4D/SQLlib_4D生成的
相关问题 更多 >
编程相关推荐