簡體   English   中英

Python總是使用pydobc連接崩潰

[英]Python always crashes using pydobc connection

我在使用pyodbc模塊( python3 )時遇到了python3 以下代碼始終使python崩潰(我從DOS終端運行它)。 main()函數返回時,崩潰發生。 我的數據源是一個4D v13數據庫遠程服務器。 我正在使用似乎已正確安裝但實際上效率不高的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崩潰窗口跟蹤向我提供以下信息:

Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: python.exe
  Application Version:  0.0.0.0
  Application Timestamp:    5066b7a2
  Fault Module Name:    4DODBC.dll
  Fault Module Version: 14.0.1.0
  Fault Module Timestamp:   53b4d1d6
  Exception Code:   c0000005
  Exception Offset: 00031798
  OS Version:   6.1.7601.2.1.0.256.48
  Locale ID:    2060
  Additional Information 1: 0a9e
  Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
  Additional Information 3: 0a9e
  Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

我已啟用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>
 [...]

順便說一句,當我從Python IDLE運行此腳本時,我沒有任何錯誤。 有誰知道此代碼出了什么問題,我該如何解決?

除了可以解決崩潰問題之外,pyodbc的替代方法可能是使用由以色列BrewsterGithub上創建的用於4D( p4d )的本機Python驅動程序。

p4d是適用於4D(第4維)數據庫服務器的Python數據庫API 2.0兼容驅動程序。 因此,以前使用過任何python數據庫模塊的任何人都應該熟悉用法。 該模塊基於4D提供的C庫,並使用CFFI與Python集成。 因此,此模塊的安裝確實需要CFFI。

p4d驅動程序是基於4D / SQLlib_4D構建的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM