我试图找出以下查询中的错误但无法执行此操作,
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之后检查过但是找不到任何错误。请帮我解释为什么我无法运行它。
答案 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中进行参数替换的正确方法。