首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pyodbc.OperationalError TCP提供程序:错误代码0x2746 & TCP提供程序:错误代码0x20 (32)

pyodbc.OperationalError TCP提供程序:错误代码0x2746 & TCP提供程序:错误代码0x20 (32)
EN

Stack Overflow用户
提问于 2021-02-10 16:26:14
回答 1查看 453关注 0票数 0

你好,我有一个使用pyodbc的问题,我正在尝试在SQL DB中进行更新。我有一个测试集,其中更新应该被调用3次。

第一次没有任何问题地运行this,然后第二次我收到了这个错误消息:

代码语言:javascript
运行
复制
pyodbc.OperationalError: ('08S01', '[08S01] [Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: Error code 0x2746 (10054) (SQLExecDirectW)')

在第三个问题上,我得到了这样的信息:

代码语言:javascript
运行
复制
pyodbc.OperationalError: ('08S01', '[08S01] [Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: Error code 0x20 (32) (SQLExecDirectW)')

我试图搜索这些错误代码,它似乎与数据库连接有关,但我非常确定我的数据库是正常的,并很好地连接到我的程序。

下面是我更新的方式:

代码语言:javascript
运行
复制
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请求,它工作了:

代码语言:javascript
运行
复制
%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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-10 19:46:16

好了,我终于找到了问题所在:我在一个在多进程中启动函数的类的属性中声明了DBMANAGER,因此,这3个请求彼此冲突,所以我在每个进程中重新定义了DBMANAGER,现在一切正常

结论:注意对数据库的多进程访问

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66133275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档