我已经开发了一些Python脚本,这些脚本使用PyMySQL库将数据插入MariaDB数据库。
这些脚本运行良好,直到昨天。昨天服务器的硬盘坏了。我刚安装了3个磁盘(其中1个用于引导和SWAP,另两个在EXT4和/安装点的RAID 1中)。当主软件包准备就绪时,由于下一个查询,我发现脚本运行不正常
INSERT
INTO
devices(
source_id,
serialnumber,
NAME,
location_desc
)
SELECT
2,
'5996B',
'Barbate',
'CADIZ'
WHERE NOT EXISTS
(
SELECT
1
FROM
devices
WHERE
serialnumber = '5996B'
)
如果设备不存在,此查询将设备插入设备表。这些脚本在我的本地MariaDB服务器中运行良好,但在生产服务器中却无法运行,给出了下一个错误:
Error
SQL query: Documentation
INSERT
INTO
devices(
source_id,
serialnumber,
NAME,
location_desc
)
SELECT
2,
'5996B',
'Barbate',
'CADIZ'
WHERE NOT EXISTS
(
SELECT
1
FROM
devices
WHERE
serialnumber = '5996B'
)
MariaDB said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE NOT EXISTS
(
SELECT
1
FROM
devices
W' at line 14
我认为这是与更新版本的MariaDB的兼容性问题。如何在不重写Python脚本的情况下修复它?
编辑:
结果:SELECT VERSION();
本地服务器中的响应(SQL语句在其中运行):10.4.6-MariaDB
在生产服务器中的响应(SQL语句不起作用):10.3.17-MariaDB-0+deb10u1
我找到了解决方案:
FROM DUAL
在某些mysql服务器版本中是必需的,因此要使其正常工作,需要将查询更改为:
INSERT
INTO
devices(
source_id,
serialnumber,
NAME,
location_desc
)
SELECT
2,
'5996B',
'Barbate',
'CADIZ'
FROM DUAL
WHERE NOT EXISTS
(
SELECT
1
FROM
devices
WHERE
serialnumber = '5996B'
)
我希望有人觉得这有用