![](/img/trans.png)
[英]mssql-django - TCP Provider: Error Code 0x2746 (10054) (SQLDriverConnect)
[英]pyodbc.OperationalError TCP Provider: Error code 0x2746 & TCP Provider: Error code 0x20 (32)
您好,我在使用 pyodbc 時遇到問題,我正在嘗試在 SQL DB 中進行更新。 我有一個測試集,其中更新應該被調用 3 次。
第一次運行沒有問題沒有任何問題,然后第二次我有這個錯誤消息:
pyodbc.OperationalError: ('08S01', '[08S01] [Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: Error code 0x2746 (10054) (SQLExecDirectW)')
在第三個我有這個消息:
pyodbc.OperationalError: ('08S01', '[08S01] [Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: Error code 0x20 (32) (SQLExecDirectW)')
我試圖搜索那些錯誤代碼,它似乎與數據庫連接有關,但我很確定我的數據庫沒問題並且與我的程序連接良好。
這是我的更新方式:
def depreciate_hi_by_id_data_file(self,id_data_file):
str_query = f"""UPDATE HMOQTHEI SET HEI_IS_DEPRECIATED = 1 WHERE HEI_HEALTH_INDICATOR_ID IN (SELECT HMOQTHEI.HEI_HEALTH_INDICATOR_ID FROM HMOQTDAF INNER JOIN HMOQTHEI ON HMOQTDAF.DAF_DATA_FILE_ID = HMOQTHEI.HEI_DATA_FILE_ID WHERE (HMOQTHEI.HEI_IS_DEPRECIATED = 0 AND HMOQTDAF.DAF_FILE_NAME = '{id_data_file}' ))"""
self.logger.info('MARKING HI FOR DEPRECIATION')
try:
self.database.execute_update_query(str_query)
self.logger.info('HI SUCCESSFULLY DEPRECIATED')
except Exception as e:
self.logger.exception('HI DEPRECIATION FAILED')
def execute_update_query(self, str_query: str):
self.logger.debug(f'DEBUG | Execute query : {str_query}')
cursor = self.connection.cursor()
cursor.execute(str_query)
self.connection.commit()
cursor.close()
我覺得奇怪的是,對於這個函數的 3 次調用,我有 3 種不同的行為。 我還嘗試在 zeppelin 筆記本中運行我的 sql 請求,它可以工作:
%python
from pandas import read_sql_query
from pyodbc import connect
#-HMO011-HMO011-HMO011-HMO011-HMO011-HMO011-HMO011-HMO011
str_driver = "xxxx"
str_server = "xxxx"
str_database = "xxxx"
str_username = "xxxx"
str_password = "xxxx"
str_connection = 'DRIVER=' + str_driver + ';SERVER=' + str_server + ';DATABASE=' + str_database + ';UID=' + str_username + ';MARS_Connection=Yes' + ';PWD=' + str_password
connection = connect(str_connection)
cursor = connection.cursor()
id_data_file = "001_306_53_20201201102042.json"
str_query = f"""UPDATE HMOQTHEI SET HEI_IS_DEPRECIATED = 0 WHERE HEI_HEALTH_INDICATOR_ID IN (SELECT HMOQTHEI.HEI_HEALTH_INDICATOR_ID FROM HMOQTDAF INNER JOIN HMOQTHEI ON HMOQTDAF.DAF_DATA_FILE_ID = HMOQTHEI.HEI_DATA_FILE_ID WHERE (HMOQTHEI.HEI_IS_DEPRECIATED = 1 AND HMOQTDAF.DAF_FILE_NAME = '{id_data_file}' ))"""
cursor.execute(str_query)
connection.commit()
cursor.close()
connection.close()
好的,所以我終於找到了問題所在:我在 class 的屬性中聲明了我的 DBMANAGER,該屬性在多進程中啟動了 function,因此,3 個請求相互沖突,所以我在每個進程中重新定義了我的 DBMANAGER現在一切都很好
結論:謹防多進程訪問數據庫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.