Python 如何将JSON对象插入MySQL数据库?
我是python新手,正在研究如何用不同的python代码将一些JSON插入MySQL数据库。它在单独运行时工作正常,但在我尝试连接第二到第一个脚本时不工作。如何在第一个python脚本中链接第二个python,以便它可以一起工作 我有第一个类似于bellow的代码,该代码用于将图像发送到API并生成一个json文件Python 如何将JSON对象插入MySQL数据库?,python,mysql,json,database,Python,Mysql,Json,Database,我是python新手,正在研究如何用不同的python代码将一些JSON插入MySQL数据库。它在单独运行时工作正常,但在我尝试连接第二到第一个脚本时不工作。如何在第一个python脚本中链接第二个python,以便它可以一起工作 我有第一个类似于bellow的代码,该代码用于将图像发送到API并生成一个json文件data.json import glob import argparse import requests import json import time import os imp
data.json
import glob
import argparse
import requests
import json
import time
import os
import cv2
import numpy as np
from pprint import pprint
import json_mysql
def main():
result = []
regions = ['id']
time_to_wait = np.inf
time_counter = 0
while True:
files = glob.glob(os.path.join("./image_dir*/*.jpg"))
files.sort(key=os.path.getmtime)
for file in files:
if os.path.isfile(file):
with open(file, 'rb') as fp:
response = requests.post(
'https://API/',
data=dict(regions=regions),
files=dict(upload=fp),
headers={'Authorization': 'Token ' + 'XXXX'})
result.append(response.json())
with open('data.json', 'w') as outfile:
json.dump(result, outfile)
time.sleep(1)
pprint(response.json())
os.remove(file)
time.sleep(1)
time_counter += 1
if time_counter > time_to_wait: break
print("waiting for file... ")
if __name__ == '__main__':
main()
json_mysql.create_db()
它生成json文件,如下所示:
第二个代码用于创建“data.json”并将其存储到MySQL数据库:
from urllib.request import urlopen
import urllib
import json
import sys
import pymysql
def dbconnect():
try:
db = pymysql.connect(
host="localhost",
user="root",
passwd="YYYY",
)
except Exception as e:
sys.exit("Can't connect to Database")
return db
def create_db():
db_name="plate_recognizer"
table_name="vehicles"
db = dbconnect()
cursor = db.cursor()
cursor.execute("SET sql_notes = 0;")
cursor.execute("CREATE DATABASE IF NOT EXISTS {}".format(db_name))
cursor.execute("SET sql_notes = 0;")
cursor.execute(
"""CREATE TABLE IF NOT EXISTS {}.{}(time varchar(150),plate varchar(20),region varchar(150), score varchar(20), filename varchar(50), tipe varchar(10));""".format(db_name, table_name))
cursor.execute("SET sql_notes = 1;")
with open('data.json') as f:
data = json.load(f)
for i in data:
cursor.execute(
"""INSERT INTO {}.{}(time, plate, region, score, filename, tipe) VALUES(%s, %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE plate =%s """.format
(db_name, table_name),
(i['timestamp'], i['results'][0]['plate'].upper(), i['results'][0]['region']['code'], i['results'][0]['score'], i['filename'], i['results'][0]['vehicle']['type'], i['results'][0]['plate'].upper()))
db.commit()
db.close()
if __name__ == '__main__':
create_db()
提前感谢。您应该将代码分成几种方法。每种方法都应该独立于其他方法,负责执行特定的任务。例如,您可以使用
insert_data()
方法插入数据
# creates your db
def create_db():
db_name="plate_recognizer"
table_name="vehicles"
db = dbconnect()
cursor = db.cursor()
cursor.execute("SET sql_notes = 0;")
cursor.execute("CREATE DATABASE IF NOT EXISTS {}".format(db_name))
cursor.execute("SET sql_notes = 0;")
cursor.execute(
"""CREATE TABLE IF NOT EXISTS {}.{}(time varchar(150),plate varchar(20),region varchar(150), score varchar(20), filename varchar(50), tipe varchar(10));""".format(db_name, table_name))
cursor.execute("SET sql_notes = 1;")
# pass data to be inserted
def insert_data(cursor, data):
for i in data:
cursor.execute(
"""INSERT INTO {}.{}(time, plate, region, score, filename, tipe) VALUES(%s, %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE plate =%s """.format
(db_name, table_name),
(i['timestamp'], i['results'][0]['plate'].upper(), i['results'][0]['region']['code'], i['results'][0]['score'], i['filename'], i['results'][0]['vehicle']['type'], i['results'][0]['plate'].upper()))
db.commit()
db.close()
def main():
db = dbconnect()
cursor = db.cursor()
# your logic
while True:
files = glob.glob(os.path.join("./image_dir*/*.jpg"))
files.sort(key=os.path.getmtime)
for file in files:
if os.path.isfile(file):
with open(file, 'rb') as fp:
response = requests.post(
'https://API/',
data=dict(regions=regions),
files=dict(upload=fp),
headers={'Authorization': 'Token ' + 'XXXX'})
result.append(response.json())
with open('data.json', 'w') as outfile:
json.dump(result, outfile)
time.sleep(1)
pprint(response.json())
# insert data in db
insert_data(cursor, response.json())
os.remove(file)
time.sleep(1)
time_counter += 1
if time_counter > time_to_wait: break
print("waiting for file... ")
“不行”是什么意思?你有错误吗?你能描述一下结果吗?我的意思是,当我运行第一个python时,它无法将存储json数据的第二个python脚本链接到sql数据库-@Akina,对不起。我想同时运行两个脚本。当我运行第一个代码时,它无法将json存储到mysql。但是,当我运行第二个python代码时,它就可以工作了。编辑你的帖子文本并将问题显式地添加到其中。有任何一个可以工作吗?它是否创建了数据库和表?