Python MySQLdb模块:不调用字符串格式可以插入或更新吗?

Posted

技术标签:

【中文标题】Python MySQLdb模块:不调用字符串格式可以插入或更新吗?【英文标题】:Python MySQLdb module: can you insert or update without calling string format? 【发布时间】:2017-03-24 16:56:00 【问题描述】:

对于 Python 模块 mysqldb,我想插入或更新数据库而不对我的数据(如 int 或 float 或其他)执行 str()。我有版本 1.2.3。

我四处搜索,查看了许多不同的示例,并检查了 API 文档,我发现的所有用于执行数据库插入或更新的示例都需要从 int 或 float 数据生成字符串,然后调用 cursor.execute()

对于 Python 模块 MySQLdb,您可以在不调用整数或浮点数的字符串格式的情况下插入或更新吗?如果是,如何?

( 顺便说一句,我不喜欢将 python int/float 转换为 str 以进行插入,因为它会消耗 CPU,然后接收 mysql 服务器进程必须执行 str 到 int/float 的转换,这也会再次消耗 CPU。另外对于浮点数,如果您错误地执行字符串表示...您的浮点数可能会失去精度...或者有时会舍入...等等。 )

【问题讨论】:

【参考方案1】:

如果您使用 查询参数化MySQLdb 会在后台自动进行 Python 到数据库的类型转换:

cursor.execute("UPDATE table SET field = %s", (value, ))

注意查询参数是如何在一个元组中单独传递的。而且,您不需要在查询中的占位符周围加上引号 - 驱动程序也会处理它。

【讨论】:

所以value 不会在对cursor.execute() 的调用中转换为字符串? @TrevorBoydSmith 它不仅可以转换为字符串,还可以根据参数的 Python 类型转换为适当的类型 - mysqldb 会在后台自动计算出来。

以上是关于Python MySQLdb模块:不调用字符串格式可以插入或更新吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中将 MySQLdb 返回从元组转换为字符串

如何给 Python 的 MySQLDB 模块增加 Timeout 超时功能

Python MySQLdb 模块

mac里用PyCharm中引用MySqlDB始末

Python学习之MySQLdb模块

python 2.x MysqlDB模块使用