代码之家  ›  专栏  ›  技术社区  ›  ep84

如何正确使用字符串来创建Python-MySQL查询?

  •  0
  • ep84  · 技术社区  · 7 年前

        mysql.connector.errors.ProgrammingError: 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 '1
    '(data in address_line_1)' NULL '(data in city field)'
    '(data in postal code field)' '(data in state code field)' 'US'
    (latitude data) (longitude data) '(first two characters of is_active field data)' at line 1
    

    它或多或少告诉我错误在哪里,但不是什么原因造成的。我想我可能在正确引用查询字符串中的某些内容时遇到了问题。我不知道错误是什么,因为对我来说,查询似乎是正确的,而且我不知道Python-MySQL能够诊断格式错误的所有特性。

    下面是表创建命令(在花了几个小时调整之后,这个命令有效):

        sql=("CREATE TABLE IF NOT EXISTS `locations` ("
    "   `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,"
    "   `location_id` VARCHAR(48),"
    "   `is_valid` BOOLEAN,"
    "   `street_line_1` VARCHAR(48),"
    "   `street_line_2` VARCHAR(48),"
    "   `city` VARCHAR(16),"
    "   `postal_code` VARCHAR(8),"
    "   `state_code` CHAR(2),"
    "   `country_code` CHAR(2),"
    "   `latitude` DECIMAL(10,6),"
    "   `longitude` DECIMAL(10,6),"
    "   `accuracy` VARCHAR(12),"
    "   `is_active` BOOLEAN,"
    "   `is_commercial` BOOLEAN,"
    "   `is_forwarder` BOOLEAN,"
    "   `delivery_point` VARCHAR(18),"
    "   `last_sale_date` DATE,"
    "   `total_value` INT(12)"
    ")  ENGINE = InnoDB")
    

        sql = ("INSERT INTO `locations`(`location_id`, `is_valid`, `street_line_1`,"
    "   `street_line_2`, `city`, `postal_code`, `state_code`, `country_code`,"
    "   `latitude`, `longitude`, `accuracy`, `is_active`, `is_commercial`,"
    "   `is_forwarder`, `delivery_point`, `last_sale_date`, `total_value`)"
    "   VALUES(%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s)")
    

    我错过了什么?

    2 回复  |  直到 7 年前
        1
  •  2
  •   ScaisEdge    7 年前

    第一个建议是用逗号分隔%s

     sql = ("INSERT INTO `locations`(`location_id`, `is_valid`, `street_line_1`,"
    "   `street_line_2`, `city`, `postal_code`, `state_code`, `country_code`,"
    "   `latitude`, `longitude`, `accuracy`, `is_active`, `is_commercial`,"
    "   `is_forwarder`, `delivery_point`, `last_sale_date`, `total_value`)"
    "   VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)")
    
        2
  •  1
  •   olisch    7 年前

    我猜您的值不包括“,”,因此值(%s%s…)不正确。您需要改用值(%s,%s,…)。