我正在為同事制作一個腳本,以便能夠從 SQL Server 資料庫生成報告。我正在使用 pymssql 來管理與資料庫的連接。
我的問題是我希望使用腳本的人能夠指定他們想要回傳的列,以及他們需要的日期范圍。
我正在使用這段代碼,但列名不起作用(據我所知,它們被轉義了,這是問題的一部分)VS 輸入它們。
if len(columns) == 1:
query = "SELECT %s FROM dbo.tblPayments WHERE %s < dbo.tblPayments.fldPayDate AND dbo.tblPayments.fldPayDate > %s;"
else:
query = "SELECT " ("%s, " * (len(columns) - 1)) "%s FROM dbo.tblPayments WHERE %s <= dbo.tblPayments.fldPayDate AND dbo.tblPayments.fldPayDate >= %s;"
我看到有人說要使用字串連接來.format()代替,但如果可以避免的話,我不想插入安全風險。有什么我想念的嗎?我能做些什么來確保它的安全?
謝謝
uj5u.com熱心網友回復:
您可以使用sys.columns視圖查找某個表的所有列。首先獲取串列并使用此結果驗證應用程式中的用戶輸入。如果找到該列,您可以使用它來構建query 字串。
SELECT c.name
FROM sys.columns c
WHERE OBJECT_SCHEMA_NAME ( c.object_id) ='dbo'
AND OBJECT_NAME(c.object_id) = 'tblPayments'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344759.html
標籤:Python sql sql-server pymssql
上一篇:Oracle:按日期欄位合并多行
下一篇:計算列中的不同值
