Python MySQL 连接器弃用警告

3
我将使用Python的MySQL连接器和SQLAlchemy进行翻译。 我尝试使用以下代码截断表格:
 session = db.Session()

 session.execute('''TRUNCATE TABLE Orders''')
 session.commit()

但是我收到了这个警告。

python3.8/site-packages/mysql/connector/connection_cext.py:506: DeprecationWarning: PY_SSIZE_T_CLEAN将被要求用于“#”格式 self._cmysql.query(query,

我也会收到其他查询的此问题。提供的示例仅作为示例。

我为什么会收到这个警告?

1个回答

1

为什么我会收到这个警告?

可能是因为您在使用 mysql-connector 版本 1.4.3 之前的版本,当时他们还没有添加 PY_SSIZE_T_CLEAN 宏

此外,一些模块 例如 unittest 默认情况下 显示 DeprecationWarning、PendingDeprecationWarning、ResourceWarning 和 ImportWarning,即使它们默认被忽略。

更多信息:

从 Python 3.8 开始,如果在包含 Python.h 之前未定义宏 PY_SSIZE_T_CLEAN,则在 Python C API 中使用 # use without PY_SSIZE_T_CLEAN 会引发警告。

https://python.readthedocs.io/en/stable/c-api/arg.html#strings-and-buffers

对于所有格式的变体(s#,y#等),长度参数的类型(int或Py_ssize_t)由在包含Python.h之前定义宏PY_SSIZE_T_CLEAN来控制。如果定义了此宏,长度将是Py_ssize_t而不是int。这种行为将在未来的Python版本中更改为仅支持Py_ssize_t并放弃int支持。最好始终定义PY_SSIZE_T_CLEAN。

6
OP 提到的是 mysql-connector-python 而不是 pymysql。截至 2021 年 6 月,最新版本的 mysql-connector-python(8.0.25)仍会产生此弃用警告。请注意,此处为直译,尽可能保留原文信息和结构,如果需要口语化或更自然的表达,可以再进行修改。 - abigperson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接