转义动态sqlite查询?

2024-03-08

我目前正在根据用户的输入构建 SQL 查询。可以在此处查看如何完成此操作的示例:

def generate_conditions(table_name,nameValues):
    sql = u""
    for field in nameValues:
        sql += u" AND {0}.{1}='{2}'".format(table_name,field,nameValues[field])
    return sql

search_query = u"SELECT * FROM Enheter e LEFT OUTER JOIN Handelser h ON e.Id == h.Enhet WHERE 1=1"

if "Enhet" in args:
    search_query += generate_conditions("e",args["Enhet"])
c.execute(search_query)

由于每次我无法在执行调用中插入值时 SQL 都会发生变化,这意味着我应该手动转义字符串。然而,当我搜索每个人都指向执行......

我对生成查询的方式也不太满意,所以如果有人有其他方法的想法,那就太好了!


您有两个选择:

  1. 切换到使用SQL炼金术 http://www.sqlalchemy.org/;它会让生成动态 SQL 变得更加Pythonicand确保正确引用。

  2. 由于您不能使用表名和列名的参数,因此您仍然必须使用字符串格式将它们包含在查询中。你的values另一方面,应该始终使用 SQL 参数,只要这样数据库就可以准备语句。

    不建议只插入直接从用户输入中获取的表名和列名,这是far以这种方式注入任意 SQL 语句太容易了。根据您接受的此类名称列表来验证表名称和列名称。

    因此,为了以您的示例为基础,我会朝这个方向发展:

    tables = {
        'e': ('unit1', 'unit2', ...),   # tablename: tuple of column names
    }
    
    def generate_conditions(table_name, nameValues):
        if table_name not in tables:
            raise ValueError('No such table %r' % table_name)
        sql = u""
        params = []
        for field in nameValues:
            if field not in tables[table_name]:
                raise ValueError('No such column %r' % field)
            sql += u" AND {0}.{1}=?".format(table_name, field)
            params.append(nameValues[field])
        return sql, params
    
    search_query = u"SELECT * FROM Enheter e LEFT OUTER JOIN Handelser h ON e.Id == h.Enhet WHERE 1=1"
    
    search_params = []
    if "Enhet" in args:
        sql, params = generate_conditions("e",args["Enhet"])
        search_query += sql
        search_params.extend(params)
    c.execute(search_query, search_params)
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转义动态sqlite查询? 的相关文章

随机推荐

  • Eclipse / Scala 插件中的“非法循环引用”错误

    我已经创建了一个文件夹x带有源文件package scala在里面 该文件包含以下代码 package x package object y trait A case class B extends A Eclipse 显示编译错误 ill
  • 切换到Android Studio 2.0后使用Dagger 2时出现NoClassDefFoundError

    在升级到 Android Studio 2 0 之前 我可以毫无问题地使用 Dagger 2 现在我得到了NoClassDefFoundError这让我停顿了一天多 我正在寻求帮助 看来 Gradle 不能我的AppModule类 尽管很明
  • 静态成员实例引用问题[重复]

    这个问题在这里已经有答案了 我在 Analytics 类中保存了以下静态方法 public static void buttonHit string eventName string eventAction string descripti
  • 使用 jquery 的 .validate 函数提交表单

    这是一个简单的问题 我有一个正在使用 jquery 的 validate 函数进行验证的表单 问题是 只有当我使用以下方式提交表单时 验证似乎才起作用
  • 如何在启动后将调试器附加到 iOS 应用程序?

    我正在解决一个问题 该问题很少发生 并且当我在 Xcode 下运行东西时似乎不会发生 是否可以正常运行应用程序 即从 Springboard 直到出现我的问题 然后在此时附加调试器 如果可能的话 我更愿意在不越狱的情况下执行此操作 连接已连
  • 为加密数据创建订单列

    我正在将加密数据保存到数据库中 有没有一种方法可以创建纯文本数据的 哈希码 或指纹或校验和 如果我对 哈希码 进行排序 排序 则顺序将与我保存纯文本数据并执行相同同样的sort order by操作可以吗 我基本上需要一个 SOUNDEX
  • Rails:我应该如何在控制器之间共享逻辑?

    这个问题肯定有人问过 但我找不到 我有一个UsersController and an Admin UsersController 显然 这些类中发生了很多事情 例如 strong parameters 创建 编辑用户后要遵循的路径 是相同
  • Rails rspec 设置子域

    我正在使用 rSpec 来测试我的应用程序 在我的应用程序控制器中 我有一个像这样的方法 def set current account current account Account find by subdomain request s
  • adwords api:检索每日支出(费用)

    有人有一些示例代码来说明如何获取 AdWords 帐户的每日总支出 所有广告系列 吗 我无法找到以简单的方式执行此类操作的示例代码 因此任何帮助 指针 代码将不胜感激 我将使用 python 库 但任何其他语言也很酷 提前致谢 Hoff 我
  • 无法在 Xcode 中找到设备支持文件[重复]

    这个问题在这里已经有答案了 在我的设备中运行我的应用程序时 我在 Xcode 中遇到以下错误 Xcode 版本为 10 01 我的设备 iOS 版本为 12 2 iPhone 5S 无法找到设备支持文件 您需要将 Xcode 更新到最新版本
  • 模块“rxjs”没有导出成员“firstValueFrom”

    App service 文件如下所示 import Injectable from nestjs common import HttpService from nestjs axios import Observable firstValu
  • 使用失败、回溯 Prolog 查找列表的最小值

    我想使用导致回溯的失败来计算列表的最小值 我如何改变分钟 分钟 X 分钟 以使其工作 min X A B X is the min of A B min X X Y X lt Y min Y X Y Y lt X member X X me
  • 使用隐藏代码在 WPF 中缩放画布

    这里的场景是 我有一张画布 上面画着不同的图表 现在的要求是使用 C 或 VB 使用背后的代码放大画布 此外 我需要将缩放代码放置在某个 dll 中 以便我可以在我的应用程序中重复使用同一组代码 现在我的问题是如何做到这一点 我已经尝试过以
  • 如何在 bootstrap4 中添加自定义断点以及如何在 scss 中使用响应式断点混合

    我正在开发一个 Angular 5 应用程序 它需要是一个响应式应用程序 我面临着使其响应的问题1366X768 and 1920X1080字体大小不同的分辨率 问题一 我在 style scss 中覆盖了断点 如下所示 grid brea
  • 从 C 函数返回数组

    我编写了一个返回数组的函数 虽然我知道我应该返回一个动态分配的指针 但我仍然想知道当我返回在函数内部本地声明的数组 不将其声明为静态 时会发生什么 当我注意到函数中内部数组的内存没有被释放时 我感到很惊讶 并且我将数组返回到主函数 主要的
  • Linux Azure Web 应用上的 Puppeteer

    我正在尝试在 Linux Azure Web Apps 上运行 Puppeteer 但日志显示 node modules puppeteer local chromium linux 782078 chrome linux chrome 加
  • Rails:每个http请求都会创建一个新的连接池吗?

    我正在读这篇文章https polycrystal org posts 2012 05 25 active record connection pool fairness html https polycrystal org posts 2
  • <应用程序名称>.pch 文件使用情况

    pch文件的重要性是什么以及 ifdef的意义是什么OBJC 另外 我们在哪里定义像 ifdef IS Production 这样的参数 这些参数在 pch 文件中检查 pch 文件允许您避免导入 UIKit h 和 Foundation
  • 在 Swing 中显示动画 BG

    动画 循环 GIF 可以显示在JLabel或者在 HTML 中 在格式化文本组件中 例如JEditorPane 并被视为循环 但是要加载图像以绘制为容器的背景 我通常会使用ImageIO read or Toolkit getImage 后
  • 转义动态sqlite查询?

    我目前正在根据用户的输入构建 SQL 查询 可以在此处查看如何完成此操作的示例 def generate conditions table name nameValues sql u for field in nameValues sql