在通过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
对我来说一切都很好,此插件有什么问题?
答案 0 :(得分:0)
Python的DB-API是开发数据库模块的标准,它指定必须提供“序列或映射”作为.execute()
的参数参数。
您的参数是一个字符串,因此数据库无法理解查询中所放置的内容。
需要的是将.execute()
的第二个(第二个)参数变成一个序列,并且通常使用的序列是一个元组。有时使人惊讶的是,元组不是通过用括号/括号括起来的值来形成 ,并且尾随逗号是必需的。请注意,如果要插入多个值,则根本不会遇到此问题。
所以需要的是:
self.curr.execute("""
INSERT IGNORE INTO test (
`name`
)
VALUES (%s)
""", (
item['test'],
# ^ trailing comma!
)
)
至少有一个数据库模块,该模块仅允许使用一个值(即不是一个序列),这与DB-API规范背道而驰;过去让我失望。