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