使用 PyODBC 时 MySQL 查询出现语法错误,但在 MySQL Workbench 中有效

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

我有一个查询在 MySQL Workbench 中运行得很好,但是当我尝试使用 PyODBC 运行它时,出现语法错误。这是查询:

SET @username=?;SELECT Username, CASE
        WHEN EXISTS (SELECT 1 FROM Admins WHERE Username=@username) THEN "ADMIN"
        WHEN EXISTS (SELECT 1 FROM Customers WHERE Username=@username) THEN "CUSTOMER"
        WHEN EXISTS (SELECT 1 FROM Retailers WHERE Username=@username) THEN "RETAILER"
        ELSE "UNKNOWN"
        END
        AS Type 
        FROM Users WHERE Username=@username;

我收到的错误消息是:

('42000', "[42000] [MySQL][ODBC 8.1(w) Driver][mysqld-8.0.31] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT Username, CASE\n\t\tWHEN EXISTS (SELECT 1 FROM Admins WHERE Username= @usern' at line 1 (1064) (SQLPrepare)")

我尝试通过使用 DECLARE 声明 @username 变量来修改查询,但这似乎也不起作用。知道可能导致此语法错误的原因以及如何修复它吗?

python mysql pyodbc
1个回答
0
投票

考虑对多个语句使用

BEGIN ... END
复合语句。另外,避免字符串文字使用双引号,并使用反引号转义潜在的保留字。

BEGIN
    SET @username = ?;

    SELECT 
       `Username`, 
       CASE
         WHEN EXISTS (SELECT 1 FROM Admins WHERE `Username`=@username) THEN "ADMIN"
         WHEN EXISTS (SELECT 1 FROM Customers WHERE `Username`=@username) THEN "CUSTOMER"
         WHEN EXISTS (SELECT 1 FROM Retailers WHERE `Username`=@username) THEN "RETAILER"
         ELSE 'UNKNOWN'
      END AS `Type`
    FROM `Users`
    WHERE `Username`=@username;
END;
© www.soinside.com 2019 - 2024. All rights reserved.