相关疑难解决方法(0)

Monkey-patch Python类

我有一个班级,位于一个单独的模块中,我无法改变.

from module import MyClass

class ReplaceClass(object)
  ...

MyClass = ReplaceClass
Run Code Online (Sandbox Code Playgroud)

除了这个文件之外,这不会改变MyClass.但是,如果我要添加这样的方法

def bar():
   print 123

MyClass.foo = bar
Run Code Online (Sandbox Code Playgroud)

这将工作,foo方法将在其他地方可用.

如何完全替换课程?

python monkeypatching

45
推荐指数
3
解决办法
3万
查看次数

SQLAlchemy 在查询 [INFORMATION_SCHEMA].[TABLES] 时插入期间挂起

我有一个使用 SQLAlchemy 将一些数据插入 MS SQL Server 数据库的 Python 进程。当 Python 进程运行时,它会在插入期间挂起。我打开 SQLAlchemy 日志记录来获取更多信息。我发现它挂在此时,SQLAlchemy 似乎正在请求有关整个数据库的表架构信息:

2020-10-30 08:12:07 [11444:6368] sqlalchemy.engine.base.Engine._execute_context(base.py:1235) INFO: SELECT [INFORMATION_SCHEMA].[TABLES].[TABLE_NAME] 
FROM [INFORMATION_SCHEMA].[TABLES] 
WHERE [INFORMATION_SCHEMA].[TABLES].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [INFORMATION_SCHEMA].[TABLES].[TABLE_TYPE] = CAST(? AS NVARCHAR(max)) ORDER BY [INFORMATION_SCHEMA].[TABLES].[TABLE_NAME]
2020-10-30 08:12:07 [11444:6368] sqlalchemy.engine.base.Engine._execute_context(base.py:1240) INFO: ('dbo', 'BASE TABLE')
Run Code Online (Sandbox Code Playgroud)

我此时数据库中正在发生其他“事情”,包括一些开放事务,我的猜测是,无论出于何种原因,查询都会以[INFORMATION_SCHEMA].[TABLES]某种方式造成一些死锁或阻塞。

我还读过(此处),这[INFORMATION_SCHEMA].[TABLES]是一种不会导致僵局的观点,这与我对导致此问题的原因的猜测相矛盾。

我的问题是:我可以更改 SQLAlchemy 的配置/设置,以便它首先不会进行此查询吗?

更新1:插入的Python代码如下:

with sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params).connect() as connection:
    # df is a Pandas DataFrame
    df.to_sql(name=my_table, con=connection, if_exists='append', index=False)
Run Code Online (Sandbox Code Playgroud)

请注意,当我在一天中没有进行其他数据库事务的其他时间运行 Python 脚本时,代码可以正常工作。在这些情况下,日志会立即继续,如下所示,列出数据库中的所有表:

2020-10-30 08:13:03 …
Run Code Online (Sandbox Code Playgroud)

python sql-server sqlalchemy pyodbc pandas

6
推荐指数
1
解决办法
2453
查看次数

标签 统计

python ×2

monkeypatching ×1

pandas ×1

pyodbc ×1

sql-server ×1

sqlalchemy ×1