sql-server - 从 Python 获取输入以在 SQL 查询中使用并将结果返回到屏幕
问题描述
我有一个 python 应用程序,我试图从 MSSQL 数据库返回结果,该数据库从输入到 python 应用程序中的输入派生
我已经连接到 SQL 数据库,如果输入行号,可以返回行。
# Select IP
input_var = input("Enter IP Address: ")
def IP_Search():
cursor.execute("SELECT IP, Location, Description, Project, OS, DNS, NETBIOS, MAC FROM [IPAM].[dbo].[Sheet1$] WHERE IP=(?)" (input_var))
row = cursor.fetchall()
while row:
print(IP_Search)
row = cursor.fetchall()
我希望它选择与用户输入的 ip 地址匹配的记录
解决方案
更新以解决 sql 注入攻击。
您需要格式化字符串,有几种方法可以做到这一点。
python 中当前的最佳实践是使用新的格式字符串。字符串前面的 f 让 python 知道您想要格式化字符串并{input_var}
告诉 python 您想要用变量 input_var 的值替换它。
def IP_Search(input_var):
cursor.execute(f"SELECT IP, Location, Description, Project, OS, DNS, NETBIOS, MAC FROM [IPAM].[dbo].[Sheet1$] WHERE IP={input_var}")
row = cursor.fetchall()
while row:
print (IP_Search)
row = cursor.fetchall()
input_var = input("Enter IP Address: ")
IP_Search(input_var)
正如评论中指出的那样,这使得数据库容易受到 SQL 注入攻击。您可以在此处查看详细信息:https ://bobby-tables.com/python
相反,您所做的是将变量传递给cursor.execute
函数,如下所示:
def IP_Search(input_var):
cursor.execute("SELECT IP, Location, Description, Project, OS, DNS, NETBIOS, MAC FROM [IPAM].[dbo].[Sheet1$] WHERE IP=%s", (input_var,))
row = cursor.fetchall()
while row:
print (IP_Search)
row = cursor.fetchall()
input_var = input("Enter IP Address: ")
IP_Search(input_var)
推荐阅读
- python - Bot Framwork - 如何将参数传递给 promptValidator 或在 promptValidatorContext- python 中添加值
- automation - 为自动化流程编写“如果这样,那么那样”功能
- jackson - Akka Http [Java] 将查询参数读入枚举类
- azure - Azure Devops 管道使用构建验证触发两次
- html - 如何复制谷歌浏览器检查元素中的所有 CSS 代码?
- python - *** 警告:跳过 31093 字节的输出 *** Databricks
- python - 如何安装特定版本的 Spacy
- javascript - 在 TypeScript 中进行子类化并使用更具体的属性或方法
- docker - Cloud Run 错误:容器无法启动。在不暴露 PORT 或 URL 的情况下运行后台任务
- pandas - 绘制图表时没有发现带有标签的句柄会出现图例错误