将字符串变量传递给 MySQL,作为元组失败

2023-12-09

使用新购买的 RaspberryPi,我对 Python/MySQL 非常陌生,所以请原谅我发布的天真问题。 我已经看过很多关于此问题的问答,但我似乎无法理解“为什么”这会失败。我收到错误:“必须是字符串或只读缓冲区,而不是元组”。如果我用 TYPE 测试它,我的变量会显示为字符串,所以现在我迷路了。

import MySQLdb
import time
db = MySQLdb.connect(host="localhost", user="user",passwd="easypwd", db="imagepi")
cursor = db.cursor()
current_time = time.strftime("%H:%M:%S")
current_date = time.strftime("%Y-%m-%d")
filename = (current_time+'.jpg')
sql = ("""INSERT INTO imagelocator(batch, date, time, filename) VALUES
('1001', current_date, current_time, %s)""", filename)
cursor.execute(sql)
db.commit()
db.close()

非常感谢您在正确的方向上为我提供了一点推动。


The sql变量是一个元组。一半是你的 SQL 语句,另一半是 token 值%s语句中的参数。但是,简单地将元组传递给参数不会将其分解并使用元组中的每个元素作为单独的参数。为此,您必须使用星号:function_to_call(*tuple_args)...但我认为您也会遇到问题,因为数据库游标需要一个字符串statement参数,以及一个序列parameters争论。这parameters参数必须是序列(元组、列表、集合等)即使只有一个值.

TL;DR - 你需要做更多类似这样的事情:

sql = "INSERT INTO table_name (a_column, b_column) VALUES ('asdf', %s)"
args = (filename,)
cursor.execute(sql, args)

...或者,如果你真的想耍花招,对所有内容都使用元组:

sql = ("INSERT INTO table_name (a_column, b_column) VALUES ('asdf', %s)", (filename,))
cursor.execute(*sql)

编辑:我想我没有澄清...虽然用括号括起来的字符串不会创建元组,但添加逗号does. So, (string_var)不是元组,而(string_var,)是。希望这能消除对上述代码如何运行的任何困惑。

另外,这里还有一些关于星号的文档;既有无聊的官方文档,也有更容易理解的博客文章:

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

将字符串变量传递给 MySQL,作为元组失败 的相关文章

随机推荐

  • DataSet 不支持 C# 中的 System.Nullable<> 异常

    public partial class Form2 Form public Form2 InitializeComponent private void Form2 Load object sender EventArgs e RST D
  • Laravel 说“路线未定义”

    在我的routes php 中我有 Route patch preferences id UserController update 在视图文件 account preferences blade php 中我有 Form model Au
  • Python 2.5.2 的 lower() 和 upper() 是否遵循 Unicode?

    我正在制作一个 Google AppEngine 应用程序 Python 2 5 2 运行时环境是否遵循 Unicode 标准 例如 unicode 对象上的 lower 和 upper 方法 是的 也不是 有关示例 请参阅此处讨论的代码
  • Swift 语言中的感叹号是什么意思?

    Swift 编程语言指南有以下示例 class Person let name String init name String self name name var apartment Apartment deinit println na
  • 是否可以在各种失败情况下(例如异常)在程序终止之前使 std::cout 自动刷新

    如果引发异常 则缺少刷新的标准输出会使诊断问题变得更加困难 有什么可以使用的缓解措施吗 例如 终止挂钩 编译器标志等 我可以理解 在段错误中 刷新可能非常困难 但我认为对于任意线程中未捕获的异常 它至少在理论上应该是可能的 注意 由于可能使
  • Selenium 调试:元素在点 (X,Y) 处不可单击

    我试着刮这个site通过硒 我想单击 下一页 按钮 为此我这样做 driver find element by class name pagination r click 它适用于许多页面 但不适用于所有页面 我收到此错误 WebDrive
  • 开玩笑: toBeInstanceOf(Object) 失败

    只是检查我们是否正在导出对象失败 如下所示 import as Foo from foo describe Foo gt test should export an object gt expect Foo toBeInstanceOf O
  • 基于字符向量重新排序数据框

    我认为这应该非常简单 但我找不到办法做到这一点 我想根据一个因素重新排序数据框 到目前为止我能找到的所有答案都提供了逻辑排序 但这是任意的 并且是数字和字母的混合 也许这是一个问题 因为它是factor not a vector 但向量的答
  • 在Python中获取音频输入设备列表

    如何使用 Python 以这种格式获取 Linux 中的音频输入设备列表hw 0 1 我已经使用 pyaudio 尝试了以下操作 def getaudiodevices p pyaudio PyAudio print p get defau
  • 如何构建netty-transport-native-epoll-4.0.32.Final-linux-x86_64.jar?

    我在 netty 中使用本机 epoll 传输 并且能够从存储库下载 netty transport native epoll 4 0 32 jar 不过我还需要 netty transport native epoll 4 0 32 Fi
  • Xamarin 跨平台证书固定

    我正在使用 Xamarin 设计一个应用程序 我想通过使用证书固定来提高我们的安全性 但我找不到办法做到这一点 我可以使用 android 的本机方法来做到这一点 但我想知道是否有跨平台的解决方案 甚至是 Windows Phone 的解决
  • 在 Web 应用程序中创建和下载巨大 ZIP(来自多个 BLOB)的最佳实践

    我需要从我的 Web 应用程序执行大量文件下载 显然 这将是一个长期运行的操作 它将被用于每年一次 每个客户 所以时间不是问题 除非超时 但我可以通过创建某种形式的 keepalive 心跳来处理 我知道如何创建一个隐藏的iframe并与它
  • 以编程方式将应用程序添加到 Windows 防火墙

    我有一个通过 ClickOnce 安装和更新的应用程序 该应用程序通过 FTP 下载文件 因此需要添加为 Windows 防火墙的例外 由于 ClickOnce 的工作方式 EXE 的路径会随着每次更新而变化 因此异常也需要更改 对防火墙进
  • bash-求行中数字的平均值

    我正在尝试逐行读取文件并找到每行中数字的平均值 我收到错误 expr non numeric argument 我已将问题范围缩小到 sum expr sum i 但我不确定为什么代码不起作用 while read a rows do fo
  • 如何安排 C# Windows 服务每天运行一个方法? [复制]

    这个问题在这里已经有答案了 可能的重复 如何安排 C Windows 服务每天执行任务 我正在创建一个 C Windows 服务 但我没有找到让计时器每天在 App Config 文件中指定的特定时间触发方法的最佳方法 例如 每天早上 6
  • 运行libsandbox

    我目前正在开发一个在线 C C 汇编编译器 我偶然发现了一个名为 libsandbox 的好软件 这使我能够运行在线编写的代码 对其进行编译并拦截系统调用 如果有 首先 我对 Linux 环境还是个新手 我已经下载了 tar gz 解压它
  • Facebook Login Graph API 返回错误的个人资料图片 URL

    我通过调用使用 Facebook 图形 API它返回我期望的 json 响应 像这样的东西 id 1234567890987654321 email xxxxxx u0040example com name xxxx xxxx first
  • C# 无符号字节加密到 Java 有符号字节解密

    我有一个 C 加密应用程序我的部分文件 因为它们是大文件 使用 RijndaelManaged 因此 我将文件转换为字节数组并仅加密其中的一部分 然后我想使用Java解密该文件 所以我必须解密仅文件的一部分 指那些字节 在 C 中加密 问题
  • Google QUERY 公式包含下拉列表中的“全部”

    我有 3 个单独的下拉菜单来在我的 Google 表格中生成以下 QUERY 函数 QUERY HISOP Training A2 D select A B C D where A contains M5 and C contains M6
  • 将字符串变量传递给 MySQL,作为元组失败

    使用新购买的 RaspberryPi 我对 Python MySQL 非常陌生 所以请原谅我发布的天真问题 我已经看过很多关于此问题的问答 但我似乎无法理解 为什么 这会失败 我收到错误 必须是字符串或只读缓冲区 而不是元组 如果我用 TY