MariaDB在新的MariaDB安装中具有语法

问题描述 投票:0回答:1

我已经开发了一些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

mysql sql pymysql
1个回答
0
投票

我找到了解决方案:

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'
)

我希望有人觉得这有用

© www.soinside.com 2019 - 2024. All rights reserved.