通过参数化查询使用python插入MySQL会导致错误

时间:2020-04-29 20:04:53

标签: python mysql

在通过python 3.x插入MySQL 5.x的过程中,我确实收到一个错误,找不到原因。这是一个简单的插入:

self.curr.execute(""" 
    INSERT IGNORE INTO test (
        `name`
    ) 
    VALUES (%s)

    """, (                 

        item['test']                    
    )
)

导致此错误:

Failed to save datasets. INSERT IGNORE INTO test (
                    `name`
) 
VALUES (%s) Error  1064 (42000): 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 '%s)' at line 4

对我来说一切都很好,此插件有什么问题?

1 个答案:

答案 0 :(得分:0)

Python的DB-API是开发数据库模块的标准,它指定必须提供“序列或映射”作为.execute()的参数参数。

您的参数是一个字符串,因此数据库无法理解查询中所放置的内容。

需要的是将.execute()的第二个(第二个)参数变成一个序列,并且通常使用的序列是一个元组。有时使人惊讶的是,元组不是通过用括号/括号括起来的值来形成 ,并且尾随逗号是必需的。请注意,如果要插入多个值,则根本不会遇到此问题。

所以需要的是:

self.curr.execute(""" 
    INSERT IGNORE INTO test (
        `name`
    ) 
    VALUES (%s)

    """, (                 

        item['test'],
        #           ^ trailing comma!                   
    )
)

至少有一个数据库模块,该模块仅允许使用一个值(即不是一个序列),这与DB-API规范背道而驰;过去让我失望。