由于在形成 SQL 查询时不赞成字符串替换,因此如何动态分配表名?

2024-02-27

sqlite3 还很新,所以请耐心听我说。

我想要一个可以传递表名和要更新的值的函数。

我最初是从这样的事情开始的:

def add_to_table(table_name, string):
    cursor.execute('INSERT INTO {table} VALUES ({var})'
        .format(
            table=table_name,
            var=string)
        )

这工作得很好,但进一步阅读 sqlite3 表明这是一种非常不安全的处理方式。然而,使用他们的?语法,我无法传递名称来指定变量。

我尝试添加?代替表,但这会引发语法错误。

cursor.execute('INSERT INTO ? VALUES (?)', ('mytable','"Jello, world!"'))
>> >sqlite3.OperationalError: near "?": syntax error  

Can the table在sql语句中安全且动态地传入?


它不是动态字符串替换per-se那就是问题所在。它使用用户提供的字符串进行动态字符串替换,这是一个大问题,因为这会让您遭受 SQL 注入攻击。如果您绝对 100% 确定表名是您控制的安全字符串,那么将其拼接到 SQL 查询中将是安全的。

if some_condition():
   table_name = 'TABLE_A'
else:
   table_name = 'TABLE_B'

cursor.execute('INSERT INTO '+ table_name + 'VALUES (?)', values)

也就是说,使用这样的动态 SQL 肯定是一种代码味道,因此您应该仔细检查是否可以找到一个更简单的替代方案,而不需要动态生成的 SQL 字符串。此外,如果您确实想要动态 SQL,那么 SQLAlchemy 之类的东西可能有助于保证您生成的 SQL 格式良好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由于在形成 SQL 查询时不赞成字符串替换,因此如何动态分配表名? 的相关文章

  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • 从Python中的字典列表中查找特定值

    我的字典列表中有以下数据 data I versicolor 0 Sepal Length 7 9 I setosa 0 I virginica 1 I versicolor 0 I setosa 1 I virginica 0 Sepal
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street

随机推荐

  • 特定时间的深度睡眠

    我需要在特定时间激活外设 然后休眠一段时间 然后再次停用外设 我可以用一个简单的方法来做到这一点sleep但这会让我的 ESP32 保持唤醒状态并消耗电池 有没有办法在规定的时间内进入深度睡眠 然后再次醒来 理想情况下 我会简单地安排在一定
  • 为androidTest添加布局资源

    我想将布局 xml 文件添加到我的androidTest仅用于测试的文件夹 I added res layout文件夹到androidTest并尝试向其中添加布局文件 但它给出了错误URI is not registered for xml
  • 无法在 Android 应用程序运行时加载库

    我正在开发 android 应用程序 其中我使用 JNI 作为本机 c 代码 我在 android 2 0 版本和 ndkr3 上构建这个应用程序 它运行良好 现在 当我更改android sdk版本1 5和api版本3时 我遇到了无法打开
  • JavaScript 中获取两个日期之间的差异? [复制]

    这个问题在这里已经有答案了 如何获得全天中 2 个日期之间的差异 我不需要一天的任何分数 var date1 new Date 7 11 2010 var date2 new Date 12 12 2010 var diffDays dat
  • 如何使用 Ember CLI 进行生产就绪构建?

    我一直在 Ember 中构建一个 Web 应用程序 并准备将其放在服务器上以供公众使用 我只想创建 dist 文件夹 然后我将通过 FTP 手动将其上传到服务器 我如何在 Ember 中为此构建一个 dist 我不知道如何打开缩小并从构建中
  • Express 和 nginx net::ERR_CONTENT_LENGTH_MISMATCH

    我正在开发一个 Express 驱动的网站 它通过 nginx 代理 有时在浏览器中加载页面时 我会得到以下信息 GET http myapp local css bootstrap css net ERR CONTENT LENGTH M
  • 如何将参数传递给 p:dataTable 中的 valueChangeListener?

    我正在打电话valueChangeListener on a
  • 根据另一个单元格中的值更改单元格中的值

    搜索了这个但找不到方法 我希望能够将一个单元格中的值转换为不同单元格中的另一个值 如下所示 当列中的单元格A包含Y在列中设置相同数量的单元格B to Male或者当列中的单元格A包含N在列中设置相同数量的单元格B价值Female 例如 A2
  • C相当于fstream的peek

    我知道在 C 中 您可以使用以下命令查看下一个字符 in peek 当尝试 查看 C 中文件的下一个字符时 我该如何解决这个问题 fgetc http opengroup org onlinepubs 007908799 xsh fgetc
  • 使用 Glumpy 将 NumPy 数组显示为持续更新的图像

    我有一个使用 NumPy 和 SciPy 在 Python 中运行的模拟模型 它会生成一个 2D NumPy 数组作为每次迭代的输出 我一直使用 matplotlib 和 imshow 函数将此输出显示为图像 然而 我发现了 Glumpy
  • 将对象列表分组为尽可能少的子列表,但不超过最大总和

    我正在尝试编写一种方法 将对象分组到最少量的子列表中 而无需混合类型 对象上的 int 字段 或其值的总和超过定义的最大值 它应该看起来像这样 List
  • Maven:如何安装 mvnsh?

    我怀疑我的处理方式完全错误 我听说过mvnsh http shell sonatype org 并想尝试一下 以减少构建时的延迟 但我完全不知道如何做到这一点 我仍在学习 Maven 并在两者之间进行错误的比较mvn和类似的工具gem ca
  • 将使用 AWT 和 Swing 绘制电影的 Java 应用程序移植到服务器端

    我正在使用一些代码 使用 AWT 和 Swing 功能将动画输出写入桌面 它使用 2D 图形进行绘制并以字体呈现文本 此代码可以使用 Java Media Framework 将动画保存到电影文件 我想将此代码移植到纯服务器端环境 以便使用
  • 在 Javascript 中从 JSON 数组查找名称值对的有效方法

    我当前正在调用一个服务 该服务将响应作为具有名称值对的对象数组发送 下面是一个例子 这些名称值对的数量可以是任意顺序 但我只想访问名称 name2 的值 除了循环遍历每个对象并检查名称以获得 name2 的相应值之外 还有其他有效的方法吗
  • 按位右展开算法

    本来这篇文章要求逆绵羊和山羊操作 但我意识到这超出了我的实际需要 所以我编辑了标题 因为我只需要一个右展开算法 http programming sirrida de bit perm html c e 这更简单 我在下面描述的示例仍然具有
  • 派生类的受保护成员未知

    我找到了一个图形的开源类库 当我将它包含在我的项目中时 它有很多错误 我试图修复它们 但是有一个编译错误我无法解决 基类 template
  • 如何使用 GreenDao 3 生成内容提供者?

    在GreenDao 2 x 中 有一个方法叫做Entity addContentProvider 它为实体生成了 ContentProvider 如何在 GreenDao 3 x 中做同样的事情 使用相同的方法 Entity addCont
  • 没有 single-int-arg 构造函数/工厂方法

    我有这个代码 final Person p new Person 1L final ObjectMapper mapper JacksonUtil INSTANCE getMapper final TypeReference
  • Android 滑动抽屉在创建时打开

    我想要一个在应用程序启动时打开的滑块 它将通过按钮等打开 当用户关闭它时 将有更多按钮可以访问 滑动抽屉可以做到这一点吗 我要在 onCreate 方法中添加什么 Thanks XML 布局 在基本 LinearLayout 中
  • 由于在形成 SQL 查询时不赞成字符串替换,因此如何动态分配表名?

    sqlite3 还很新 所以请耐心听我说 我想要一个可以传递表名和要更新的值的函数 我最初是从这样的事情开始的 def add to table table name string cursor execute INSERT INTO ta