Python在使用pydobc连接时总是崩溃

2024-10-01 07:29:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用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运行这个脚本时,我没有发现任何错误。有人知道这段代码出了什么问题吗?我应该如何解决它?在


Tags: selfnoneformatsqlreturnmaindefcon
1条回答
网友
1楼 · 发布于 2024-10-01 07:29:45

pyodbc的另一个解决崩溃问题的方法是使用这个本地Python驱动程序来实现4D(p4d),它是由Israel BrewsterGithub上创建的。在

p4d is a Python Database API 2.0 compliant driver for the 4D (4th Dimension) database server. As such, usage should be familiar to anyone who has used any python database modules before. This module is based off of a C library provided by 4D, and integrated with Python using CFFI. As such, installation of this module does require CFFI.

p4d驱动程序是根据4D/SQLlib_4D生成的

相关问题 更多 >