Как индивидуализировать строку MySQL в отдельных файлах JSON? - PullRequest
0 голосов
/ 13 октября 2019

Итак, я разрабатываю (для школьного проекта) веб-приложение с полным стеком, и мне нужно кодировать браузер.

Мое приложение начинается с файла CSV, созданного с помощью scrapy и очищенного пандами в python,и с этим фрагментом кода


f = open(r"raspados_panda.csv", "r", encoding='UTF8')
fString = f.read()

# convert string to list
fList = []
for line in fString.split('\n'):
    fList.append(line.split(','))

# open connection to database
db = pymysql.connect("localhost", "root", "asafajad", "raspados")

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Drop table if it already exist using execute() method
cursor.execute("DROP TABLE IF EXISTS RASPADOS")

# create column names from the first line in fList
ID = "id"
CATEGORIA = fList[0][0];
TITULO = fList[0][1];
FECHA = fList[0][2];
PARRAFO = fList[0][3];
IMAGEN = fList[0][4]

# create RASPADO table // place a comma after each new column except the last
queryCreateRaspadoTable = """CREATE TABLE RASPADOS(
                            {} INT NOT NULL AUTO_INCREMENT,
                            {} TEXT,
                            {} TEXT,
                            {} TEXT,
                            {} TEXT,
                            {} TEXT,
                            PRIMARY KEY (`id`)
                            )""".format(ID, CATEGORIA, TITULO, FECHA, PARRAFO, IMAGEN)

cursor.execute(queryCreateRaspadoTable)

del fList[0]
rows = ''

for i in range(len(fList) - 1):
    rows += "('{}','{}','{}','{}','{}')".format(fList[i][0], (fList[i][1]), (fList[i][2]), (fList[i][3]), (fList[i][4]))
    if i != len(fList) - 2:
        rows += ','

queryInsert = "INSERT INTO RASPADOS(categoria, parrafo, fecha, titulo, imagen) VALUES" + rows  # ('categoria', 'titulo', 'fecha', 'parrafo', 'imagen')

try:
    cursor.execute(queryInsert)
    db.commit()
except Exception as ex:
    db.rollback()
    print(ex)

db.close()

Я загружаю весь CSV-файл в одну базу данных, все внутри одной простой таблицы.

Дело в том, что когда я использую эту реакцию, его сценарийплюет мне весь CSV как один. вот код:

import React, { Component } from "react";
import MovieRow from "./MovieRow.js";
import "./App.css";
import $ from "jquery";
import { removeTypeDuplicates } from "@babel/types";

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {};
    // console.log("This is my initizlizer")

    // const movies = [
    //   {id: 0, poster_src: "https://m.media-amazon.com/images/M/MV5BMjMxNjY2MDU1OV5BMl5BanBnXkFtZTgwNzY1MTUwNTM@._V1_.jpg",
    //    title: "Avengers: Infinity War", overview:"Los superhéroes se alían para vencer al poderoso Thanos, el peor enemigo al que se han enfrentado. Si Thanos logra reunir las seis gemas del infinito: poder, tiempo, alma, realidad, mente y espacio, nadie podrá detenerlo."},
    //   {id: 1, poster_src: "https://www.visitmuskogee.com/wp-content/uploads/2019/07/AV.jpg",
    //    title: "The Avengers", overview:"El director de la Agencia SHIELD decide reclutar a un equipo para salvar al mundo de un desastre casi seguro cuando un enemigo inesperado surge como una gran amenaza para la seguridad mundial"},

    // ]

    // var movieRows = []
    // movies.forEach((movie) =>{
    //   console.log(movie.title)
    //   const movieRow = <MovieRow movie={movie} />
    //   movieRows.push(movieRow)
    // })

    // this.state = {rows: movieRows}
    this.performSearch(); //here is where i plan to save my input 
  }

  performSearch(searchTerm) {
    console.log("Perform search using moviedb");
    const urlString = "http://localhost:4000/products&query=" + searchTerm;
    $.ajax({
      url: urlString,
      success: searchResults => {
        console.log("Fetched data successfully");
        //console.log(searchResults)
        const results = searchResults.data;
        //console.log(results[0])

        //var newsRows = []
        var newsRows = [];

        results.forEach(news => {
          console.log(news.id);
          const newsRow = <MovieRow key={news.id} news={news} />;
          newsRows.push(newsRow);
        });

        this.setState({ rows: newsRows });
      },
      error: (xhr, status, err) => {
        console.error("Failed to feach data");
      }
    });
  }

  render() {
    return (
      <div>
        <table className="titleBar">
          <tbody>
            <tr>
              <td>
                <img alt="app icon" width="50" src="green_app_icon.svg" />
              </td>
              <td width="8" />
              <td>
                <h1>NewPort</h1>
              </td>
            </tr>
          </tbody>
        </table>
        <input className="Search" placeholder="Busque sus noticias" />

        {this.state.rows}
      </div>
    );
  }
}

export default App;

и файл json выглядит следующим образом:

{"data":[{"id":1,"categoria":"Política","parrafo":"\"En su marcha del   \"\"Sí se puede\"\" en la ciudad de   Olavarría el presidente   Mauricio Macri definió que \"\"uno está con la familia o está con los delincuentes y el   narcotráfico\"\" y continuó así con   la polémica con el candidato al gobernador de Buenos Aires del Frente de Todos   Axel Kicillof.\"\"No hay moral que justifique vender la droga que mata a nuestros hijos no hay doble moral ni doble discurso en esto: uno está con la familia o está con los delincuentes y el narcotráfico\"\" expresó el mandatario.\"\"Teníamos un enemigo que se estaba apropiando de nuestro país y salimos a darle batalla juntos la Provincia y la Nación.   El narcotráfico está en retroceso y lo estamos echando de nuestro país\"\" amplió y mencionó cifras \"\"récord de incautación de drogas y de presos por narcotráfico\"\".Esta semana Macri ya había tratado de   \"\"disparatada\"\" la frase de Kicillof: \"\"Hay gente que se dedica a vender droga porque se quedó sin laburo\"\".En materia económica sostuvo que \"\"lo que viene para el futuro del país es crecimiento empleo mejora del salario\"\". También hizo hincapié en formar \"\"un país fundado en la cultura del trabajo\"\".Después de una pausa en el día de ayer Mauricio Macri retomó en Olavarría la marcha del \"\"Sí se puede\"\" con la que propone recorrer 30 ciudades de la Argentina en su campaña por la reelección el 27 de octubre. Es además la quinta vez que visita la localidad bonaerense.              En medio del discurso y alentado por el canto de los asistentes   Macri aprovechó y volvió a bromear con el sobrenombre de \"\"el gato\"\".\"\"Hay gato para rato\"\" coreaba la gente y el mandatario respondió: \"\"El gato aguanta\"\".El acto fue al mediodía en el Paseo Jesús Mendia y además de la gobernadora bonaerense   María Eugenia Vidal lo acompañaron la vicepresidenta   Gabriela Michetti el intendente local Ezequiel Galli y los candidatos a diputados en Buenos Aires   Cristian Ritondo y María Luján Rey.\"\"Quiero decirles que empezamos a poner foco en el   alivio. El esfuerzo que hicieron no fue en vano porque lo que viene es mejor y vamos a salir adelante\"\" aseguró en un mensaje a la clase media pero aclaró que para eso se necesita \"\"más tiempo\"\" como \"\"pasó en la Ciudad de Buenos Aires\"\".Por último instó a sus votantes a salir a la calle y militar a través de las redes sociales pero sin agredir. \"\"Nos une querer cuidar nuestra democracia nos une querer vivir en paz nos une la honestidad nos une respetar al otro. Yo tampoco voy a parar de trabajar hasta que logremos esa Argentina que queremos y merecemos\"\" dijo.              Por su parte la gobernadora   Vidal señaló que \"\"las políticas se pueden mejorar se pueden cambiar pero lo que uno es eso no se cambia. Y nosotros somos honestos trabajadores democráticos y respetuosos. Eso nos define\"\".\"\"Como el 2015 somos millones y eso ya se esta demostrando en todas las plazas de la Argntina. Es por eso que el 27 de octubre vamos a hacer posible lo que parece imposible\"\".Después del   debate presidencial de mañana en Santa Fe Mauricio Macri volverá a encabezar una marcha el próximo lunes en Paraná Entre Ríos.              La primera se realizó en el barrio porteño de Belgrano y en su primera semana se replicó en diferentes lugares como Junín Córdoba Mendoza Santa Fe Entre Ríos y Bahía Blanca. Esta última semana pasó por Mendoza Tucumán Misiones y Salta.\"","fecha":"12 de octubre de 2019  ","titulo":"\"Mauricio Macri en Olavarría: \"\"O uno está con la familia y con la vida o está con los delincuentes y el narcotráfico\"\"\"","imagen":"//bucket2.glanacion.com/anexos/fotos/75/3117775w380.jpg"},{"id":2,"categoria":"Política","parrafo":"\"La Federación de Entidades Empresarias del Autotransporte de Cargas (Fadeeac) que reúne a unas 50 cámaras del sector y que es la corporación empresaria que negocia salarios con el gremio de los   camioneros de   Hugo Moyano desestimó afrontar el pago del   bono de $5000 en una sola cuota y evalúa declarar la \"\"emergencia sectorial\"\" por la crisis económica.De acuerdo a un relevamiento propio la Faddeac señaló que los costos del transporte de cargas aumentó un 430 por ciento en septiembre y que lleva un 35% en lo que va del año. Con estas cifras en la mano   Mario Eliceche el presidente de la federación rechazó el pedido de Moyano de afrontar el pago del bono en un solo pago. El pago extra es a partir del decreto 665/2019 que dispuso el gobierno nacional por la fuerte devaluación del peso que se dio tras las elecciones primarias de agosto.\"\"La crisis por la que está atravesando el sector no está originada en los sueldos de los trabajadores sino en la abusiva presión tributaria ejercida por el Estado sumado a la exorbitante tasa de interés que hace imposible la inversión y agravado además por el incremento y la escasez de los insumos básicos como el combustible. En el sector tenemos empresas en estado terminal\"\" indicó la Fadeeac en un comunicado.Eliceche convocará para la semana que viene a la cúpula de la Fadeeac para definir cómo seguirá la negociación con Moyano por el bono. Además se reflotará internamente la discusión paritaria ya que el acuerdo sellado en junio por un aumento de 23% por semestre finaliza en enero aunque podría sufrir alteraciones si es que en diciembre se avanza en un trato de precios y salarios como impulsa el candidato presidencial   Alberto Fernández del Frente de Todos.No se descarta que en la reunión de la Fadeeac surjan voces que presionen para declarar la \"\"emergencia sectorial\"\". El objetivo de los empresarios del transporte sería abrir diferentes ventanas de negociación no solo con Moyano sino también con el Gobierno y la AFIP para intentar lograr un alivio tributario.\"\"Si no hay un alivio de alguna manera en la presión tributaria y en las tasas de intereses el sector ingresara en breve a una crisis terminal que pondrá en serio riesgos a varias empresas y muchísimas fuentes de trabajo\"\" argumentó la Fadeeac sobre el estado de situación.Cuando la Fadeeac acordó en junio con Moyano una suba salarial de 23% por seis meses el apretón de manos incluyó un compromiso de ambas partes en negociar a partir de enero de 2020 cambios en el convenio colectivo 40/89 vinculados a la antigüedad [quieren reducirlo de 1 a 05%] las horas extras y el plus por kilometraje. En la misma negociación se debería redefinir los alcances del bono de fin de año (el gremio pidió que sea de $20.000) ya que los empresarios intentarán que la bonificación esté atada a la productividad.Moyano ya advirtió que no está dispuesto a reformar el convenio de los camioneros y presionó hace dos días con el pago de los $5000 no remunerativos en un solo pago. \"\"Es un mero paliativo ante la excesiva inflación. El planteo de pagarlo en cuotas es contrario a su finalidad\"\" expresó el gremio de los camioneros en un comunicado.\"","fecha":"11 de octubre de 2019  ","titulo":"Se tensa la negociación entre los empresarios y Moyano por el pago del bono de $5000","imagen":"//bucket3.glanacion.com/anexos/fotos/18/2924218w380.jpg"}

это всего лишь один объект, и, как этот, еще 147 находятся внутри того же jsonfile.

мне нужно добавить строку поиска

, и вот остальная часть моего кода на тот случай, если вы хотите настроить остальную часть этого интерфейса.

import React from "react";

class MovieRow extends React.Component {
  render() {
    return (
      <table key={this.props.news.id}>
        <tbody>
          <tr>
            <td>
              <img alt="poster" width="120" src={this.props.news.imagen} />
            </td>
            <td>
              {this.props.news.titulo}
              <p>{this.props.news.parrafo}</p>
            </td>
          </tr>
        </tbody>
      </table>
    );
  }
}

export default MovieRow;

iхочу отметить, что я использовал почти все папки по умолчанию, чтобы сделать проактивный проект, чтобы легко импортировать код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...