将 sql 文本文件加载到变量中并通过 pymysql 提交插入/更新查询会产生警告 - 可以安全忽略吗?

Loading sql text file into variable and submitting insert/update query via pymysql produces warnings - safe to ignore?

提问人:Bryan Archambeault 提问时间:1/16/2020 最后编辑:Bryan Archambeault 更新时间:1/16/2020 访问量:125

问:

我有一些存储在 .sql 文件中的存储过程。我想使用pymysql将这些添加到数据库中。因此,我将文件加载到一个变量中,如下所示:

    with open(filepath, 'r') as file:
        sql = file.read()

然后我使用 pymysql 提交它,如下所示:

    connection = pymysql.connect(...)

    with connection.cursor() as cursor:
        cursor.execute(sql)

    connection.close()

这似乎效果很好,但我收到了令我担忧的警告。它们看起来像这样:

/usr/lib/python3/dist-packages/pymysql/cursors.py:322: Warning: (139, 'Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.')
self._do_get_result()
/usr/lib/python3/dist-packages/pymysql/cursors.py:322: Warning: (1246, "Converting column '' from VARCHAR to TEXT")
self._do_get_result()

我的问题是:这些可以安全忽略吗?

更新:

我弄清楚了第一个警告(关于行大小太大的警告):生成该警告的 sql 文本文件是视图创建,而不是 SP 创建,并且视图中的字段数量确实超过了行大小,因此谜团在那里解开了。我仍在试图弄清楚究竟是什么导致了第二个警告。

更新2:

我想出了第二个警告。生成该文本文件的 sql 文本文件是 SP 创建,其中有一个变量声明为 DECLARE v_sql VARCHAR(32000)。我将其更改为 VARCHAR(2000),警告消失了。因此,看起来变量大于特定大小将生成该警告。

python mysql 警告 pymysql

评论

0赞 Hack5 1/16/2020
您应该发布您的表格结构
0赞 Bryan Archambeault 1/16/2020
@Hack5 - 没有表结构。这些 .sql 文件只是创建存储过程。因此,它们只是 CREATE PROCEDURE 语句。
0赞 Hack5 1/16/2020
好吧,我对 SQL 没有太多经验,但由于其中一个警告指的是一列,我假设您必须有一个表(否则该列来自哪里?
0赞 Bryan Archambeault 1/16/2020
@Hack5 - 确切地。我的猜测是PyMySQL内部使用某种表结构来执行游标或其他东西?毫无头绪。这就是我发布这个的原因。
0赞 Hack5 1/16/2020
哦,如果不是菜鸟错误,我什么都不知道,对不起。

答:

0赞 Bryan Archambeault 1/16/2020 #1

对于我发布的第一个警告,问题是:生成该警告的 sql 文本文件是视图创建,而不是 SP 创建,并且视图中的字段数量确实超过了行大小

对于我发布的第二个警告,问题是:生成该警告的 sql 文本文件是 SP 创建,并且其中有一个变量声明为 DECLARE v_sql VARCHAR(32000)。我将其更改为 VARCHAR(2000),警告消失了。因此,看起来变量大于特定大小将生成该警告。