MySQL您的SQL语法有错误;检查与MySQL服务器版本对应的手册,了解正确的语法

MySQL您的SQL语法有错误;检查与MySQL服务器版本对应的手册,了解正确的语法,mysql,python-3.x,Mysql,Python 3.x,我正在尝试将json中的值插入mysql列中,mysql中的所有列都是varchar类型,并且当前在 def print_details()函数 错误: 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 'Number

我正在尝试将json中的值插入mysql列中,mysql中的所有列都是varchar类型,并且当前在 def print_details()函数

错误:

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 'Number, Customer Name,Restaurant Number,Restaurant NameOrdered,Number of Items,p' at line 1
我所尝试的: 我曾尝试将数据类型更改为数字和字符串,并将选项更改为utf8 general,但没有任何帮助

我的代码:

import sys
from kafka import KafkaProducer,KafkaConsumer
import findspark
from boto3 import *
import mysql.connector
import boto3
import json
findspark.init()
# Creating Spark Context
from pyspark import SparkContext
from pyspark.sql import SparkSession
def get_connection(self):
     spark = SparkSession.builder.master("local[*]").appName("SparkByExamples.com").getOrCreate()  
     return spark   

def json_serializer(data):
     return json.dumps(data).encode("utf-8")
    

def read_s3():
    p1 = KafkaProducer(bootstrap_servers=['broker:29092'], value_serializer=json_serializer)    
    s3 = boto3.resource('s3')
    bucket = s3.Bucket('kakfa')
    for obj in bucket.objects.all():      
        key = obj.key
        body = obj.get()['Body'].read().decode('utf-8')
    p1.send("kakfatopic",body)
    p1.flush()
def read_from_topic(self,spark):
    df = spark.readStream \
        .format("kafka") \
        .option("kafka.bootstrap.servers", "broker:29092") \
        .option("subscribe", "kakfatopic") \
         .option("startingOffsets", "earliest") \
        .load()
    df2 = df \
        .writeStream \
        .format("console") \
        .start()     
def get_consumer(self):
    consumer = KafkaConsumer("kakfatopic", group_id='group1', bootstrap_servers=
    "broker:29092",value_deserializer=lambda x: json.loads(x.decode('utf-8')))
    return  consumer   
def print_details(self,c1,cursor):
    for msg in c1:
          msg1=msg.value
          for t in json.loads(msg1):   
            cursor.execute("""INSERT INTO ubereats (Customer Number, Customer Name,Restaurant Number,Restaurant NameOrdered,Number of Items,price,Operating Start hours,Operating End hours)  VALUES(%s,%s,%s,%s,%s,%s,%s,%s)""", (t["Customer Number"], t["Customer Name"],t["Restaurant Number"],t["Restaurant NameOrdered"],t["Number of Items"],t["price"],t["Operating Start hours"],t["Operating End hours"]))
            mydb.commit()
            print( "record inserted.")         
                   
class Foo:
    def __init__(self):  
        mydb = mysql.connector.connect(host="172.20.0.3",user="root",password="example",db="ubereatsdb")
        cursor = mydb.cursor()
        spark = get_connection(self)
        read_s3()
        # System.setProperty("hadoop.home.dir", "$HADOOP_HOME\winutils-master\hadoop-2.x.x")
        c1 = get_consumer(spark)
        print_details(self,c1,cursor)
   

f = Foo()  
我的Json文件:

[{
    "Customer Number": "1",
    "Customer Name": "Aditya",
    "Restaurant Number": "2201",
    "Restaurant NameOrdered": "Bawarchi",
    "Number of Items": "3",
    "price": "10",
    "Operating Start hours": "9:00",
    "Operating End hours": "23:00"
},
{
    "Customer Number": "2",
    "Customer Name": "Sarva",
    "Restaurant Number": "2202",
    "Restaurant NameOrdered": "Sarvana Bhavan",
    "Number of Items": "4",
    "price": "20",
    "Operating Start hours": "8:00",
    "Operating End hours": "20:00"
},
{
    "Customer Number": "3",
    "Customer Name": "Kala",
    "Restaurant Number": "2203",
    "Restaurant NameOrdered": "Taco Bell",
    "Number of Items": "5",
    "price": "30",
    "Operating Start hours": "11:00",
    "Operating End hours": "21:00"
}
]
我的Mysql表结构:

如果列名中确实有空格,则需要在反勾中引用,因此:

cursor.execute("""INSERT INTO ubereats (`Customer Number`, `Customer Name`,`Restaurant Number`,`Restaurant NameOrdered`,`Number of Items`,price,`Operating Start hours`,`Operating End hours`)  VALUES(%s,%s,%s,%s,%s,%s,%s,%s)""", (t["Customer Number"], t["Customer Name"],t["Restaurant Number"],t["Restaurant NameOrdered"],t["Number of Items"],t["price"],t["Operating Start hours"],t["Operating End hours"]))

如果列名中确实有空格,则需要在倒勾中引用,因此:

cursor.execute("""INSERT INTO ubereats (`Customer Number`, `Customer Name`,`Restaurant Number`,`Restaurant NameOrdered`,`Number of Items`,price,`Operating Start hours`,`Operating End hours`)  VALUES(%s,%s,%s,%s,%s,%s,%s,%s)""", (t["Customer Number"], t["Customer Name"],t["Restaurant Number"],t["Restaurant NameOrdered"],t["Number of Items"],t["price"],t["Operating Start hours"],t["Operating End hours"]))