簡體   English   中英

Pyodbc '對象引用未設置為對象的實例。'。 (111213) 帶大容量插入

[英]Pyodbc 'Object reference not set to an instance of an object.'. (111213) with bulk insert

我一直在使用以下代碼在我們的 Azure SQL 池(以前的 SQL DW)上進行批量插入:

def save_sql_bulk(self, table_name, schema, file_path):
        logging.info(f"Starting proccess to save data to table:{table_name}")

        logging.info(f"Connecting to sink database: {sy_server}")
        cnxn_sy = pyodbc.connect(sy_cnxn)



        logging.info(f"Appending to table: {table_name} with schema: {schema} from path: {file_path}")
        query = f'''

                COPY INTO {schema}.{table_name}

                FROM 'https://siidatalake.blob.core.windows.net/containername/{file_path}'

                WITH(

                    FIRSTROW = 2,

                    FILE_TYPE = 'CSV',

                    MAXERRORS = 100,

                    FIELDTERMINATOR = ';',

                    CREDENTIAL = (IDENTITY= 'MANAGED IDENTITY')

                )'''

        logging.info(f"Executing query: \n {query} \n")
        print(f"Executing query: \n {query} \n")
        cnxn_sy.execute(query)
        cnxn_sy.commit()
        cnxn_sy.close()

        logging.info(f"Done appending without problems.. ")

總而言之,在大多數情況下,我沒有任何問題,但是在執行此類語句時,我有時會遇到以下問題:

處理 [file_path] 時出現異常,錯誤 [('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]111213;當前事務已中止,所有掛起的更改都已回滾。原因:111208;發生阻止進一步處理此命令的內部錯誤:'對象引用未設置為對象的實例。'。(111213)(SQLExecDirectW)“)]

有時甚至發生在已經工作了一段時間的進程中,這意味着什么? 我的表定義沒有改變,即使使用之前已經處理過的數據,進程也會失敗,因為我插入了幾百萬行的更多上下文。 我在另一個線程中讀到它可能與數據庫相關,但在我的情況下,我的數據庫是由 Azure 維護的,所以我不認為這是一個可以通過數據庫補丁或重新安裝來解決的問題,有什么想法嗎?

謝謝。

解決方案是在 pyodbc 連接中使用自動提交選項。 Azure 的 SQL 池似乎需要它來避免這個問題。

暫無
暫無

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

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