Hisense Lau 2024-02-17 19:26 采纳率: 77.8%
浏览 1
已结题

python连接sqlserver数据库的问题

在pycharm中使用pyodbc库与sqlserver数据库建立连接,想执行一条查询sql语句获取数据,但是where过滤条件需要用户输入,因此写了input并赋值给了变量名name,但执行的时候却报错了。如果在代码中直接写是可以正常运行的。想请问如何能够将用户输入的值传入sql语句

img

  • 写回答

4条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-02-17 19:27
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    在Python中,为了防止SQL注入攻击并确保数据安全,当需要将用户输入的值作为SQL查询条件时,应使用参数化查询。在pyodbc库中,你可以使用占位符(如?%s)来表示参数,并将实际值放在execute方法的第二个参数中作为一个元组。

    以下是一个示例,说明如何使用用户输入与pyodbc执行参数化的SQL查询:

    import pyodbc
    
    # 获取用户输入
    name = input("请输入要查询的名称: ")
    
    # 创建数据库连接
    server = 'your_server'
    database = 'your_database'
    username = 'your_username'
    password = 'your_password'
    cnxn_str = (
        f"DRIVER={{ODBC Driver 17 for SQL Server}};"
        f"SERVER={server};"
        f"DATABASE={database};"
        f"UID={username};"
        f"PWD={password}"
    )
    conn = pyodbc.connect(cnxn_str)
    
    # 创建游标对象
    cursor = conn.cursor()
    
    # 参数化查询
    query = "SELECT * FROM YourTable WHERE Name = ?"
    params = (name,)
    
    # 执行查询
    cursor.execute(query, params)
    
    # 获取结果
    rows = cursor.fetchall()
    
    # 处理结果
    for row in rows:
        print(row)
    
    # 关闭游标和连接
    cursor.close()
    conn.close()
    

    请替换上述代码中的your_serveryour_databaseyour_usernameyour_password以及YourTableName为你的实际服务器地址、数据库名、用户名、密码以及表名和字段名。通过这种方式,用户的输入会被正确地转义和引用,从而避免了潜在的安全风险。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 创建了问题 2月17日

悬赏问题

  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥30 java 项目中同包中,无法在子文件中引用
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题
  • ¥15 使用dify通过OpenAI 的API keys添加OpenAI模型时报了“Connection Error”错误
  • ¥40 想找个软件,但我不知道怎么找到它,我甚至不知道有没有
  • ¥15 怎么把60秒的视频时长改成显示0秒?且视频内容没有任何变化的正常播放?目的是为了解决一些平台对视频时长的要求,最好有自动处理的工具!
  • ¥15 累加器设初值为00H