我的下面的查询有什么问题

时间:2015-09-02 11:46:01

标签: python mysql

我试图找出以下查询中的错误但无法执行此操作,

 connect.execute("""INSERT INTO dummy('disk_list_disk_serial_id','disk_list_disk_size','disk_list_service_vm_id','disk_list_disk_id','disk_list_storage_tier','disk_list_statfs_disk_size','storage_pool_id') VALUES ('%s','%s','%s','%s','%s','%s','%s') """, (disk_serial_id,disk_size,service_vm_id,entity_id,storage_tier,statfs_disk_size,disk_storage_id))

当我执行时,我收到错误

ProgrammingError: (1064, "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 ''disk_list_disk_serial_id','disk_list_disk_size','disk_list_service_vm_id','disk' at line 1")

我在service_vm_id之后检查过但是找不到任何错误。请帮我解释为什么我无法运行它。

4 个答案:

答案 0 :(得分:0)

总是更好的方法是使用变量来创建长/复杂查询。 它会更好阅读

query = """
INSERT INTO dummy(disk_list_disk_serial_id,disk_list_disk_size,disk_list_service_vm_id,disk_list_disk_id,disk_list_storage_tier,disk_list_statfs_disk_size,storage_pool_id) VALUES ('%s','%s','%s','%s','%s','%s','%s') 
""" % (disk_serial_id,disk_size,service_vm_id,entity_id,storage_tier,statfs_disk_size,disk_storage_id)
connect.execute(query)

如果列类型为int,您也不需要%s的引号。我希望这有帮助

答案 1 :(得分:0)

嗯......你是否正确地看到了你的查询,你使用'引用了你的列名,它不再是列名而是字符串文字

您的查询

INSERT INTO dummy('disk_list_disk_serial_id', ...

应该是

INSERT INTO dummy(disk_list_disk_serial_id, ....

答案 2 :(得分:0)

您不应引用字段名称。

此外,您也不应该使用占位符值。 DB API在插入实际值时会为您执行此操作,具体取决于它们是否为字符串。

connect.execute("""INSERT INTO dummy (disk_list_disk_serial_id,disk_list_disk_size,disk_list_service_vm_id, ...) VALUES (%s,%s,%s,%s,%s,%s,%s) """, (...))

答案 3 :(得分:0)

列名称周围不需要引号。

编辑:我没有看一下这些标签并对sqlite特有的语法做了评论,感谢Daniel Roseman指出了这一点。这实际上是在mySQL中进行参数替换的正确方法。