小编BAl*_*len的帖子

SQLAlchemy ORM 不向 SQL Server 发送准备好的语句

在本例中,我们将 SQL Server 与 SQLAlchemy 结合使用。当查看我们的计划缓存时,我们注意到数以万计的一次性临时编译计划。如您所知,这会占用大量内存,并且返回的每个查询看起来都与此类似,其值硬编码在查询文本中:

SELECT first_name, last_name FROM dbo.[user] WHERE username = 'abc123'
Run Code Online (Sandbox Code Playgroud)

用于生成上面查询的 python 代码如下所示:

SELECT first_name, last_name FROM dbo.[user] WHERE username = 'abc123'
Run Code Online (Sandbox Code Playgroud)

我的问题:有谁知道为什么会发生这种情况,或者如何确保我们收到从 SQLAlchemy ORM 发送的准备好的语句?如果可能的话,我们不想启用强制参数化。

查询以查找一次性临时编译计划:

SELECT TOP(500) DB_NAME(t.[dbid]) AS [Database Name], t.[text] AS [Query Text], 
cp.objtype AS [Object Type], cp.cacheobjtype AS [Cache Object Type],  cp.usecounts,
cp.size_in_bytes/1024 AS [Plan Size in KB]
FROM sys.dm_exec_cached_plans AS cp WITH (NOLOCK)
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS t
WHERE cp.cacheobjtype = N'Compiled Plan' 
AND cp.objtype IN (N'Adhoc') 
AND …
Run Code Online (Sandbox Code Playgroud)

python sql sql-server sqlalchemy

7
推荐指数
0
解决办法
668
查看次数

标签 统计

python ×1

sql ×1

sql-server ×1

sqlalchemy ×1