Python 如何将JSON对象插入MySQL数据库?

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

我是python新手,正在研究如何用不同的python代码将一些JSON插入MySQL数据库。它在单独运行时工作正常,但在我尝试连接第二到第一个脚本时不工作。如何在第一个python脚本中链接第二个python,以便它可以一起工作

我有第一个类似于bellow的代码,该代码用于将图像发送到API并生成一个json文件
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代码时,它就可以工作了。编辑你的帖子文本并将问题显式地添加到其中。有任何一个可以工作吗?它是否创建了数据库和表?