gpt4 book ai didi

python - 使用 python 在查询内传递变量

转载 作者:太空宇宙 更新时间:2023-11-03 20:00:39 25 4
gpt4 key购买 nike

我正在使用下面的代码将文件从本地计算机上传到 SQL Server。目前,代码正确地从硬编码位置选取文件并将其存储到数据库中。

如何传递变量名称而不是硬编码位置:C:/Users/Desktop/SampleTestFiles/ExcelFile_7964.xlsx

当我用 ? 替换位置并将其传递到查询中时,它不起作用。

代码:

Query = '''
DECLARE @Document AS VARBINARY(MAX);
SELECT @Document = CAST(bulkcolumn AS VARBINARY(MAX)) FROM OPENROWSET( BULK 'C:/Users/Desktop/SampleTestFiles/ExcelFile_7964.xlsx', SINGLE_BLOB) AS Doc;
INSERT INTO[TEST].[dbo].[TABLE]([file_type_id], [file], [file_name], [filing_id], [created_at], [created_by], [is_required])
VALUES(?,@Document, ?, ?, ?, ?, ?)
'''
values = (file_type_id, file_name, filing_id, created_at, created_by, is_required)

connsql.cursor().execute(Query, values)
connsql.cursor().commit()
connsql.close()

最佳答案

如果您找不到更优雅的解决方案。

Query = '''
DECLARE @Document AS VARBINARY(MAX);
SELECT @Document = CAST(bulkcolumn AS VARBINARY(MAX)) FROM OPENROWSET( BULK '%s', SINGLE_BLOB) AS Doc;
INSERT INTO[TEST].[dbo].[TABLE]([file_type_id], [file], [file_name], [filing_id], [created_at], [created_by], [is_required])
VALUES(?,@Document, ?, ?, ?, ?, ?)
''' % sanitized_escaped_filename

如果您没有对文件名执行适当的清理和 sql 转义,那么该解决方案当然会面临 SQL 注入(inject)的风险。

根据您的具体情况,这可能是一个需要解决的问题,也可能不需要解决。

这完全取决于谁在编写 SQL 代码以及谁提供文件名。

如果文件名来自网络界面,您绝对必须清理和转义

关于python - 使用 python 在查询内传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59255742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com